gpt4 book ai didi

asp.net - 将 JSON 对象反序列化为 List 不适用于 asmx 服务

转载 作者:行者123 更新时间:2023-12-03 12:24:52 24 4
gpt4 key购买 nike

我在反序列化我的 JSON 字符串时遇到问题。我有一类 person具有 int 类型的序列号、名字和姓氏的公共(public)属性。我想以 JSON 格式传递这些对象的数组并将它们反序列化为列表,以便我可以在服务器上循环它们,但是 ASP.NET 表示不支持将它们反序列化为数组。我已经验证了我正在生成的 JSON,它是有效的。 ASP.NET 在反序列化之前需要拥有的 JSON 有什么特别之处吗?有趣的是,如果我将 list 对象序列化为 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, mscorlib, Version=2.0.0.0, Culture=neutral, 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 需要的对象中。对于此问题的 future 查看者,所有 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 的对象。这将包装一个人对象。然后可以将其链接到参数 p在网络服务中。 person 类型的列表类似地,接受使用人员数组而不是单个对象。我希望这可以帮助别人。

关于asp.net - 将 JSON 对象反序列化为 List<type> 不适用于 asmx 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/402996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com