使用C#/ JavaScriptSerializer反序列化json时,“值不能为null”错误

时间:2009-10-07 19:02:09

标签: asp.net-ajax

我正在尝试将我从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属性匹配?

3 个答案:

答案 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库解决了我的问题。工作就像一个魅力。