当前位置:  开发笔记 > 编程语言 > 正文

将JSON对象反序列化为List <type>不使用asmx服务

如何解决《将JSON对象反序列化为List<type>不使用asmx服务》经验,为你挑选了3个好方法。

我无法反序列化我的JSON字符串.我有一个person带有公共属性的类,类型为int,first name和last name.我想以JSON格式传递这些对象的数组,并将它们反序列化为一个列表,以便我可以在服务器上循环它们,但ASP.NET说不支持被反序列化为数组.我已经验证了我正在制作的JSON,它是有效的.ASP.NET在反序列化之前需要具有哪些特殊的JSON?有趣的是,如果我将列表对象序列化为JSON,它看起来就像我正在生成的JSON.我必须遗漏一些东西......为了澄清,我正在使用ASP.NET Ajax库进行反序列化.这是我从Web服务中获得的:

{"Message":"Type\u0027System.Collections.Generic.IDictionary`2 [[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Object,mscorlib,Version = 2.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]\u0027不支持反序列化数组."

实际上不幸的是,这似乎与反序列化没有任何关系,看起来你无法将一组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 people = 
         new JavaScriptSerializer().Deserialize>(json);

        //do stuff...
    }

Chris Westbr.. 26

我想到了.我没有将我的JSON包装在像ASP.NET Ajax要求的对象中.对于此问题的未来查看者,在发送到Web服务之前,所有JSON对象必须用主对象包装.最简单的方法是在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对象.然后,可以将其链接到pWeb服务中的参数.person类似的列表是类似的,使用一组人而不是仅一个对象接受.我希望这可以帮助别人.



1> Chris Westbr..:

我想到了.我没有将我的JSON包装在像ASP.NET Ajax要求的对象中.对于此问题的未来查看者,在发送到Web服务之前,所有JSON对象必须用主对象包装.最简单的方法是在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对象.然后,可以将其链接到pWeb服务中的参数.person类似的列表是类似的,使用一组人而不是仅一个对象接受.我希望这可以帮助别人.



2> Darin Dimitr..:

你能展示你试图反序列化的JSON字符串以及你使用Deserialize方法的方式吗?以下工作正常:

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace Test
{
    class Program
    {
        class Person 
        {
            public int SequenceNumber { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

        public static void Main() 
        {
            string json = "[{\"SequenceNumber\":1,\"FirstName\":\"FN1\",\"LastName\":\"LN1\"},{\"SequenceNumber\":2,\"FirstName\":\"FN2\",\"LastName\":\"LN2\"}]";
            IList persons = new JavaScriptSerializer()
                .Deserialize>(json);
            Console.WriteLine(persons.Count);
        }
    }
}



3> 小智..:

甚至更简单,当你在使用$ .ajax(...)时

data:"{\"key\":"+JSON.stringify(json_array)+"}",

然后在代码的另一面,让你的函数使用参数"对象键"

[WebMethod]
public static return_type myfunction(object key){...}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有