我无法反序列化我的JSON字符串.我有一个person
带有公共属性的类,类型为int,first name和last name.我想以JSON格式传递这些对象的数组,并将它们反序列化为一个列表,以便我可以在服务器上循环它们,但ASP.NET说不支持被反序列化为数组.我已经验证了我正在制作的JSON,它是有效的.ASP.NET在反序列化之前需要具有哪些特殊的JSON?有趣的是,如果我将列表
{"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) { IListpeople = 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对象.然后,可以将其链接到p
Web服务中的参数.person
类似的列表是类似的,使用一组人而不是仅一个对象接受.我希望这可以帮助别人.
我想到了.我没有将我的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对象.然后,可以将其链接到p
Web服务中的参数.person
类似的列表是类似的,使用一组人而不是仅一个对象接受.我希望这可以帮助别人.
你能展示你试图反序列化的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\"}]"; IListpersons = new JavaScriptSerializer() .Deserialize >(json); Console.WriteLine(persons.Count); } } }
甚至更简单,当你在使用$ .ajax(...)时
data:"{\"key\":"+JSON.stringify(json_array)+"}",
然后在代码的另一面,让你的函数使用参数"对象键"
[WebMethod] public static return_type myfunction(object key){...}