我正在尝试将我从asmx服务中获取的一些JSON反序列化为对象列表。类中的所有字段都匹配JSON中的字段,JSON回来有效,但我看到了看似神秘的错误:
值不能为空。参数名称:type。
我的任何对象中都没有名为type的参数。谁看过这个吗?
以下是抛出错误的代码。
System.Web.Script.Serialization.JavaScriptSerializer serr = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Rejection> l = serr.Deserialize<List<Rejection>>(json);
json是一个先前声明的字符串,并返回与我班级中的字段匹配的有效json。您要反序列化的类是否必须与json中的__type属性匹配?
答案 0 :(得分:3)
我也刚刚得到了这个 - 我相信它与没有类型解析器的序列化器初始化有关:
// 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);
我发现在反序列化存在__type
属性的JSON时(仅在使用类型解析器序列化时才存在),我才会遇到此错误。如果您的JSON没有__type
属性,那么反序列化似乎可以使用上述任何一种方法正常工作。
答案 1 :(得分:0)
我不确定您的问题究竟在哪里,但请尝试以下代码:
string input = "..."; // your asmx data
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<YourCustomClass> novos = new List<YourCustomClass>(
serializer.Deserialize<YourCustomClass[]>(input)));
答案 2 :(得分:0)
我通过避免使用javascript序列化程序并使用json.net库解决了我的问题。工作就像一个魅力。