Mam trochę danych w obiekcie C # DataSet. Mogę teraz serializować to za pomocą takiego konwertera Json.net
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Jednak używa to nazw właściwości z data
podczas drukowania do pliku .json. Chciałbym zmienić nazwy właściwości na coś innego (powiedzmy, zmień „foo” na „bar”).
W dokumentacji Json.net w części „Serializacja i deserializacja JSON” → „Atrybuty serializacji” jest napisane: „JsonPropertyAttribute ... pozwala na dostosowanie nazwy”. Ale nie ma przykładu. Czy ktoś wie, jak użyć JsonPropertyAttribute do zmiany nazwy właściwości na coś innego?
( Bezpośredni link do dokumentacji )
Dokumentacja Json.net wydaje się rzadka. Jeśli masz świetny przykład, postaram się go dodać do oficjalnej dokumentacji. Dzięki!
c#
serialization
json.net
culix
źródło
źródło
Odpowiedzi:
Możesz ozdobić właściwość, którą chcesz kontrolować, jej nazwą za pomocą
[JsonProperty]
atrybutu, który pozwala określić inną nazwę:Dokumentacja: atrybuty serializacji
źródło
[JsonProperty("FooBar")]
Jeśli nie masz dostępu do klas w celu zmiany właściwości lub nie chcesz zawsze używać tej samej właściwości zmiany nazwy, zmiany nazwy można również dokonać, tworząc niestandardowy program rozpoznawania nazw.
Na przykład, jeśli masz klasę o nazwie
MyCustomObject
, która ma właściwość o nazwieLongPropertyName
, możesz użyć niestandardowego programu rozpoznawania nazw takiego jak…Następnie wezwij do serializacji i podaj resolvera:
Wynik zostanie skrócony do {„Short”: „wartość prop”} zamiast {„LongPropertyName”: „wartość prop”}
Więcej informacji o niestandardowych rozwiązaniach tutaj
źródło
DefaultContractResolver
Musi być umieszczone w tym samym zespole, gdzie jest stosowany sposób JsonConvert.Serialize ().Jest jeszcze inny sposób, aby to zrobić, używając określonej NamingStrategy , którą można zastosować do klasy lub właściwości, dekorując je za pomocą
[JSonObject]
lub[JsonProperty]
.Istnieją predefiniowane strategie nazewnictwa, takie jak
CamelCaseNamingStrategy
, ale możesz wdrożyć własne.Implementację różnych strategii nazewnictwa można znaleźć tutaj: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
źródło