我有一个我正在序列化的类,但我正在使用[JsonProperty("Name")]
属性注释更改输出字符串的属性名称。如下所示:
[JsonProperty("Name")]
public string PersonName{ get; set; }
现在,当我想要获取数据时,值无法映射到属性,因此它们被设置为null。
这就是我获取数据的方式:
[WebMethod]
public static void GetData(List<Person> persons)
{
//each persons Name property comes as null
}
这是我从客户端发送数据的方式:
$.ajax({
type: "POST",
url: "TestPage.aspx/GetData",
data: "{'persons':" + '[{ "Name": "Me"}]' + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert("Data Submitted");
}
});
现在我无法阻止.NET序列化我从客户端传递的JSON字符串,所以我必须让我的Page Method接受List<Person>
的参数类型,否则我会得到错误,这也阻止了我使用JsonConvert.DeserializeObject<List<Person>>(person);
来解决映射问题。
所以,有人请花点时间阅读帖子并给我一些想法。
答案 0 :(得分:1)
您的网络方法正在接受人员列表,但这不是您从客户端传递的内容。您正在传递包含人员列表的对象。如果你想让它工作,你应该只传递列表本身,而不是将它包装在一个对象中。
$.ajax({
type: "POST",
url: "TestPage.aspx/GetData",
data: '[{ "Name": "Me"}]',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert("Data Submitted");
}
});
另一种替代方法是,如果无法更改客户端,则更改服务器端以期望包装器对象。
创建一个类来保存列表...
class PersonListWrapper
{
public List<Person> persons { get; set; }
}
...并更改您的网络方法以接受该课程。
[WebMethod]
public static void GetData(PersonListWrapper wrapper)
{
foreach (Person p in wrapper.persons)
{
...
}
}