jestem delegowania do API, które mogą powrócić albo 1 z 2 następujących formatów ciągów JSON:Lepszy sposób deserializacji JSON?
{
"MessageType": 6,
"Message": "Unable to SAVE new record. Invalid posted data."
}
lub
{
"Model": {
"Id": "1-6Q0RZ9",
...
},
"ResponseResult": {
"MessageType": 10,
"Message": "Successfully saved, Record Id = 1-6Q0RZ9"
}
}
muszę pobierać wyników z MessageType i próbowałem każdym razie warunek, o którym mogę myśleć, aby odczytać wyniki, ponieważ składnia lub pobieranie klucza: wartość jest różna dla każdego ciągu JSON i nie ma innych flag, które wyzwalałyby jeden lub drugi. Więc kod użyłem to:
string result = eml.PostData("API/Save", dataJSON.ToString());
var returnresult = new JavaScriptSerializer().Deserialize<dynamic>(result);
try {
var responseresults = returnresult["ResponseResult"];
rr = responseresults["MessageType"];
rrtxt = responseresults["Message"];
} catch (Exception ex) {
rr = returnresult["MessageType"];
rrtxt = returnresult["Message"];
}
Który działa świetnie. Jeśli istnieje poprawny post Db, zwraca drugi JSON, który jest poprawnie przetwarzany przez instrukcję TRY, jeśli nie, generuje błąd "nie znaleziono klucza" i analizuje zwracany łańcuch w instrukcji CATCH (pierwszy przykład JSON). Oczywiście jest to okropny kod, ale nie mogę wymyślić innego sposobu, aby to zrobić, i zastanawiałem się, czy ktoś ma sugestie? (proszę?)
Thanx z góry.
Gorąco polecam [Json.NET] (http://james.newtonking.com/projects/json-net.aspx) – AlliterativeAlice
Miałem podobne problemy z Json.NET, nie ma sposobu, aby wiedzieć, które ciąg, który otrzymasz, dopóki go nie otrzymasz w moim przypadku. –
Podczas gdy JSON.Net będzie miał te same problemy, będzie działał znacznie lepiej niż używany parser JSON. – bluetoft