2009-10-07 5 views
5

Próbuję deserializować niektóre JSON, które pobieram z usługi ASMX do listy obiektów. Wszystkie pola w obszarach klasy mecz w JSON, JSON wraca ważny, ale pojawia się pozornie tajemniczy błąd:Błąd "Wartość nie może być zerowa" podczas deserializacji json przy użyciu C#/JavaScriptSerializer

Value cannot be null. Parameter name: type.

Nie ma parametr o nazwie typu w żadnym z moich przedmiotów. Czy ktoś to widział wcześniej?

Oto kod, który rzuca błąd.

System.Web.Script.Serialization.JavaScriptSerializer serr = new System.Web.Script.Serialization.JavaScriptSerializer(); 
List<Rejection> l = serr.Deserialize<List<Rejection>>(json); 

json to ciąg zadeklarowany wcześniej i wraca z poprawnym jsonem, który pasuje do pola w mojej klasie. Czy klasa, której deserializujesz na nazwę, musi pasować do atrybutu __type w jsonie?

+0

Czy możesz zamieścić fragment kodu? –

Odpowiedz

0

nie jestem pewien dokładnie gdzie jest twój problem, ale spróbuj następującego kodu:


string input = "..."; // your asmx data 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
List<YourCustomClass> novos = new List<YourCustomClass>(
    serializer.Deserialize<YourCustomClass[]>(input))); 
0

mi rozwiązać mój problem, unikając javascript serializatora wszystko razem i korzystania z biblioteki Json.NET. Pracował jak urok.

3

Mam tylko to też - wierzę, że jej coś zrobić z serialiser jest inicjowany bez rezolwerem typu:

// The following fails 
var serialiser = new JavaScriptSerializer(); 
MyClass obj = serialiser.Deserialize<MyClass>(input); 

// But the following works fine 
var serialiser = new JavaScriptSerializer(new SimpleTypeResolver()); 
MyClass obj = serialiser.Deserialize<MyClass>(input); 

odkryłem, że mam tylko ten błąd, gdy deserialising JSON, który miał __type obecny atrybut (obecny tylko w przypadku serializacji za pomocą przelicznika typu). Jeśli twój JSON nie ma atrybutu __type, to wydaje się, że desersalizacja działa poprawnie, używając jednego z powyższych.

+3

Mam taki sam problem jak OP, próbując tego daje mi błąd "Operacja nie jest ważna ze względu na obecny stan obiektu." –

+0

@Shredder Mam zamiar zgadywać, że wyjątek to kolejny osobny problem, który widzisz tylko raz naprawiłeś pierwszy problem. – Justin

+0

Tak, jeśli dobrze pamiętam, rozwiązałem go, parsując typ __type z łańcucha json. –