繁体   English   中英

如何从C#Web方法中的Post Request中读取和反序列化json数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM