W C # jak mogę deserializować ten json, gdy jedno pole może być ciągiem znaków lub tablicą ciągów?
Mam stronę asp.net-mvc i czytam w łańcuchu Json z bazy danych. Oto następujący json w DB. Może to wyglądać tak:
{"description": "Test", "contacts": ["joe@gmail.com", "bill@yahoo.com"], "enabled": true}
albo to:
{"description": "Test", "contacts": "joe@gmail.com, bill@yahoo.com", "enabled": true}
tak jak widzisz, pole kontaktów jest albo:
ciąg (z elementami oddzielonymi przecinkami)tablica ciągów.Chcę przekonwertować na tę klasę:
public class MyJob
{
public string description;
public string[] contacts;
public string enabled;
}
kiedy próbuję przypisać tylko łańcuch (zmieniając powyższy ciąg na: publiczne kontakty string;) za pomocą JavascriptSerializer ():
var serializer = new JavaScriptSerializer();
string contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;
Dostaję ten błąd w przypadkach, gdy jest to tablica:Wpisz „System.String” nie jest obsługiwane w przypadku deserializacji tablicy.
jaki jest najlepszy sposób, aby rozwiązać ten problem, aby poradzić sobie z przypadkiem:
sznurektablica ciągów.dla pola kontaktu. Cieszę się, że potrzebna jest każda logika warunkowa. .
Próbowałem tego:
var contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;
if (contacts is string)
{
jobInfo.contacts = contacts;
}
else
{
jobInfo.contacts = String.Join("; ", contacts );
}
ale to nie wydawało się naprawić, ponieważ nadal otrzymuję błąd powyżej, gdy jest to tablica