![](/img/trans.png)
[英]How to Deserialize a JSON Array from Web API in UPW C#?
[英]how to read and deserialize json array from Post Request in C# Web Method
我已经开发了C#Web方法。 在此方法中,请求和响应均为Json数组格式。
当我从发布请求中读取Json数组时,发生错误。
我的Json Array是
[{"partner_hotel_code": "510","reservation_id": "7660"},{"partner_hotel_code": "510","reservation_id": "7666"}]
错误是
"Type 'System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' is not supported for deserialization of an array."
当我将Json更改为以下提到的格式时,我的方法正常工作。
{"JsonData":[{"partner_hotel_code": "510","reservation_id": "7660"},{"partner_hotel_code": "510","reservation_id": "7666"}]}
但是我不想要这种格式。
请帮助,如何解决问题。
您可以将该JSON数组映射到C#类的列表。
public class RootObject
{
public string partner_hotel_code { get; set; }
public string reservation_id { get; set; }
}
在Web方法中,添加参数List<RootObject> ObjectList
之所以出现此错误,是因为Json参数必须是键值对的对象,即:
{“ JsonData”:[{“ partner_hotel_code”:“ 510”,“ reservation_id”:“ 7660”},{“ partner_hotel_code”:“ 510”,“ reservation_id”:“ 7666”}]}
{'Key':Value} =>键-JsonData,Value =>项目数组
考虑到这一点,您可以按照以下方式使模型与该结构匹配:准备模型项,
public class Item
{
public string partner_hotel_code { get; set; }
public string reservation_id { get; set; }
}
然后准备一个根“节点”对象,该对象将包含项列表,我们将其称为“保留”:
public class Reservations
{
List<Item> JsonData { get; set; }
}
然后可以如下所示反序列化:
var data = new JavaScriptSerializer().Deserialize<Reservations>(postData);
但是您想要的结构类似于: [{"partner_hotel_code": "510",...}]
您可以通过多种方式实现这一目标,例如使用foreach:
var list = new List<Item>();
foreach(var item in data.JsonData)
{
list.Add(item);
}
/*The value of list here will contain the items*/
listArray[] myArray = list.ToArray();
解决此问题的另一种方法是先序列化数组,然后使用您的方法参数名称创建一个JSON对象,然后对它进行序列化……类似
var myobj = { myArray: JSON.stringify(a) };
passedData = JSON.stringify(myobj);
$.ajax({
type: "POST", contentType: "application/json", data: passedData,
url: window.location.href + "/myMethod",
success: function (result) {
....
}
});
和webMethod
public static void myMethod(String myArray)
{
dynamic jsonResponse = JsonConvert.DeserializeObject(myArray);
for (var i = 0; i < jsonResponse.Count; i++)
{
...........
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.