asp.net – 将JSON对象反序列化为列表不能使用asmx服务

前端之家收集整理的这篇文章主要介绍了asp.net – 将JSON对象反序列化为列表不能使用asmx服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有麻烦反序列化我的JSON字符串。我有一个类型的人类,具有公共属性,序列号为int,名字和姓氏。我想以JSON格式传递这些对象的数组,并将它们反序列化为一个列表,所以我可以在服务器上循环遍历它们,但是ASP.NET表示不支持将它们反序列化为数组。我已经验证了我生产的JSON,它是有效的。 ASP.NET在反序列化之前需要具备哪些特殊的JSON?有趣的是如果我序列化一个列表< person>反对JSON它看起来完全像我生产的JSON。我一定是缺少一些东西…要澄清,我正在使用ASP.NET Ajax库来反序列化。这是我从网络服务中得到的:

{“Message”:”Type \u0027System.Collections.Generic.IDictionary`2[[System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Object,PublicKeyToken=b77a5c561934e089]]\u0027 is not supported for deserialization of an array.”

实际上不幸的是,这似乎与反序列化无关,看来你不能将一组JSON对象传递给asmx Web服务。我对么?如果不能这样做,可以将JSON对象的集合传递给Web服务,并使用ASP.NET和C#在服务器上进行处理?

更新:

好的,这是我的代码。这是人类:

public class person
{
    public person()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public int seq
    {
        get;
        set;
     }

    public string firstName
    {
        get;
        set;
     }
     public string lastName
     {
        get;
        set;
     }

}

这里是我的JSON字符串:

[{"seq":1,"firstName":"Chris","lastName":"Westbrook"},{"seq":2,"firstName":"sayyl","lastName":"westbrook"}]

这里是我正在使用的代码

[WebMethod]
    public void updatePeople(string json)
    {
        IList<person> people = 
         new JavaScriptSerializer().Deserialize<IList<person>>(json);

        //do stuff...
    }

解决方法

我想到了。我没有将JSON包装在像ASP.NET Ajax要求的对象中。对于此问题的未来观众,所有JSON对象必须在发送到Web服务之前用主对象包装。最简单的方法是在JavaScript中创建对象,并使用像json2.js这样的对象进行字符串化。此外,如果使用asmx Web服务,对象必须具有__type属性才能正确序列化。一个例子可能是:
var person=new object;
person.firstName="chris";
person.lastName="Westbrook";
person.seq=-1;
var data=new object;
data.p=person;
JSON.stringify(data);

这将创建一个名为p的对象,该对象将包装一个person对象。然后可以将其链接到Web服务中的参数p。类型人物的列表是类似的,接受使用一组人,而不仅仅是一个对象。我希望这有助于某人。

猜你在找的asp.Net相关文章