2015-10-12 14 views
9

W jaki sposób można serializować obiekt bezpośrednio do instancji JObject w JSON.Net? Co jest zwykle wykonywane jest przekształcenie obiektu bezpośrednio do json ciąg tak:Serializuj obiekt bezpośrednio do JObject zamiast do łańcucha znaków w json.net

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj); 

Można by wtedy Cofnięcie że powrót do JObject następująco:

JObject jObj = JsonConvert.DeserializeObject<JObject>(jsonSTRINGResult); 

To wydaje się działa, ale wydaje się, że w ten sposób osiąga podwójne trafienie (serializuje, a następnie deserializuje). Czy SerializeObject korzysta wewnętrznie z JObject, do którego można uzyskać dostęp w jakiś sposób? Czy jest jakiś sposób, aby serializować bezpośrednio do JObject?

+1

Dlaczego chciałbyś pracować z JObject w swoim kodzie nad rodzimym typem/klasą? –

+0

http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_FromObject.htm – Eser

+0

W skrócie, pozwala to Json.Net zająć się wszystkimi trudnymi serializacjami, pozwalając mi robić rzeczy, które chcę zrobić końcowy wynik serializacji, który nie będzie do json. Jeśli chcesz wiedzieć (choć nie ma to związku z konkretnym problemem), chcę przekształcić do postaci XML w taki sposób, aby atrybuty były używane dla właściwości zamiast elementów potomnych XML, ponieważ serializator JSON.Net XML (co zrozumiałe) ma może jakieś inne dostosowania. –

Odpowiedz

1

Należy pamiętać, że trasa JObject sugeruje @Eser będzie działać tylko dla non-tablicy obiektów CLR. Wynika to w poniższym wyjątkiem przypadku próby przekształcania obiektu Array do JObject:

nieobsługiwany wyjątek typu „System.InvalidCastException” wystąpił w Newtonsoft.Json.dll

Informacje dodatkowe: Nie można rzutować obiektu typu "Newtonsoft.Json.Linq.JArray", aby wpisać "Newtonsoft.Json.Linq.JObject".

Tak więc, w przypadku jest to obiekt array następnie należy używać JArray zamiast, jak pokazano poniżej:

JArray jArray = JArray.FromObject(someArrayObject); 

Proszę podać using Newtonsoft.Json.Linq; w górnej części pliku z kodem, aby wykorzystać ten fragment kodu.

+0

Doskonałe słuchawki, dzięki! –