解析Json String以创建新的自定义对象c#

时间:2015-05-11 17:52:06

标签: c# json

我将一个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"
        }
    ]
}

我想遍历此字符串并创建新订单。

这样做的最佳方式是什么?

2 个答案:

答案 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
    }

我希望这会有所帮助。如果您有任何问题,请告诉我。