我将一个json字符串返回给WebForms中的WebMethod,我想获取json字符串并将其解析为自定义Order
对象。
我有一个班级:
public class Order
{
public string Item { get; set; }
public string Color { get; set; }
public string Qty { get; set; }
public string Size { get; set; }
}
WebMethod:
[WebMethod]
public static string SendOrder(string json)
{
List<Order> orders = new List<Order>();
return json;
}
我传递了这个字符串:
{
json: [
{
"Item":"Nike Polo #286772 - Women's Dri-FIT Micro Pique Short Sleeved Polo",
"Size":"XL",
"Color":"Light Blue",
"Quantity":"3"
},
{
"Item":"Port Authority Women's Jacket #L790 - Black",
"Size":"Medium",
"Color":"Black",
"Quantity":"3"
}
]
}
我想遍历此字符串并创建新订单。
这样做的最佳方式是什么?
答案 0 :(得分:2)
JSON格式有点奇怪,因为它映射到以下类(使用http://json2csharp.com):
public class Json
{
public string Item { get; set; }
public string Size { get; set; }
public string Color { get; set; }
public string Quantity { get; set; }
}
public class RootObject
{
public List<Json> json { get; set; }
}
我不确定为什么你有一个名为json
的顶级变量,但无论如何。
此时只需使用JSON.NET反序列化到结构中。
JsonConvert.DeserializeObject<RootObject>(yourJsonString);
如果要将对象从Json
重命名为Order
,则需要使用该属性。我不记得这个名字,但在JSON.NET文档中很容易找到。
答案 1 :(得分:0)
我最近完成了一个Windows Phone应用程序,该应用程序从基于Web API的服务器检索信息作为Json字符串。我最终使用JsonConvert类将我的对象列表从Json字符串转换为我的自定义对象。这是我的一个客户端方法的示例,它接收并转换Json字符串:
public async void GetGames()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("base url");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("specific url extention (like api/Order)");
if (response.IsSuccessStatusCode)
{
string s = await response.Content.ReadAsStringAsync();
var deserializedResponse = JsonConvert.DeserializeObject<List<Order>>(s);
//rest of code
}
}
}
另外,请确保您的网络方法确实在做某事。您发布的示例Web方法创建了一个新列表,然后只返回您传入的参数。使用Web API,您可以通过类似于以下的方法返回数据库中所有Order对象的列表:
public IQueryable<Order> GetOrders()
{
return db.Orders; //db is an instance of your DbContext class
}
我希望这会有所帮助。如果您有任何问题,请告诉我。