Otrzymuję JSON, który muszę deserializować. W tym celu używam JavaScriptSerializer.
Np. Obiekty
class Player
{
public string name{ set; get; }
public float yPos { set; get; }
public float xPos { set; get; }
}
class Communication
{
public string id{ set; get; }
public string message{ set; get; }
public string status{ set; get; }
}
Np. JSON:
var json1 = "[{\"name\":\"Master\",\"xPos\":\"34.67\",\"yPos\":\"85.36\"}, {\"name\":\"Puppet\",\"xPos\":\"19.56\",\"yPos\":\"75.19\"}]";
var json2 = "[{\"id\":\"5697862\",\"message\":\"Hello\",\"status\":\"85.36\"}, {\"id\":\"4698458\",\"message\":\"Hi\",\"status\":\"75.19\"}]";
Metoda deserializacji:
private static List<T> Deserialize<T>(string json)
{
var s = new System.Web.Script.Serialization.JavaScriptSerializer();
List<T> obj = s.Deserialize<List<T>>(json);
return obj;
}
Ale tutaj jest problem, nadchodzą dwa różne rodzaje wiadomości JSON. Jak więc dowiedzieć się, do jakiego obiektu potrzebuję deserializacji?
2 odpowiedzi
Zamiast deserializacji do określonej klasy możesz dynamicznie przetwarzać wynik
var js = new JavaScriptSerializer();
dynamic dynObj = js.DeserializeObject(jsonN);
foreach (var obj in dynObj)
{
if (obj.ContainsKey("name")) Console.WriteLine(obj["name"]);
else Console.WriteLine(obj["message"]);
}
Polecam zajrzeć do DataContractJsonSerializer (który może również deserializować) . Ta klasa zapewnia, że postępujesz zgodnie z określonym kontraktem podczas serializacji i deserializacji odpowiednio do i z JSON.
W przypadku deserializacji działa mniej więcej tak:
stream1.Position = 0;
Person p2 = (Person)ser.ReadObject(stream1);
Serializacja działa tak:
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);
Zobacz link, aby uzyskać dodatkowe wyjaśnienie.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.