在C#中将Json字符串转换为Json对象

时间:2019-05-10 15:51:16

标签: c# json .net-core

我在本地计算机上获得了Json文件,需要将其反序列化为类对象Products。我打算将Newtonsoft.Json库用作控制台应用程序。我通过以下代码实现,可以看到jsonString,但没有做正确的JsonConvert.DeserializeObject(st)???

我的json也有带有嵌套记录的产品数组!

json

com.google.application
           -ClassWithMainMethod
com.google.application.job
com.google.application.job.listener
com.google.application.job.service
com.google.application.job.utils
com.google.application.job.repository
com.google.application.job.components
com.google.application.job.configuration

json转换类

{
 "products": [
   {
    "id": "1",
    "name": "red apple",
    "pricePerUnit ": "1.53"
   },
   {
     "id": "2",
     "name": "green walnut",
     "pricePerUnit ": "0.25"
   },
   {
     "id": "3",
     "name": "avocado",
     "pricePerUnit ": "0.33"
   }
 ]
}

产品类别

var stream = File.OpenText("C:\\Products.json");
string st = stream.ReadToEnd();
var result = JsonConvert.DeserializeObject<Products>(st);

2 个答案:

答案 0 :(得分:3)

您可以重塑POCO:

EC2

然后按如下所示反序列化它:

public class ProductEntity
{
    [JsonProperty("products")]
    public List<Product> Products { get; set; }
}

public class Product
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("price")]
    public string PricePerUnit { get; set; }
}

enter image description here

答案 1 :(得分:1)

您的问题是json上下文中不存在pricePerUnit,您需要使用数据注释来指定您希望将价格解释为pricePerUnit

public class Products
{
    public string id { get; set; }
    public string name { get; set; }
    [JsonProperty(PropertyName = "price")]
    public string pricePerUnit { get; set; }
}

编辑:

正如奇闻趣事发布的那样,您没有正确地反序列化,您将需要一个List或将其反序列化为ProductEntity。

  1. var result = JsonConvert.DeserializeObject<ProductEntity>(st);
  2. var result = JsonConvert.DeserializeObject<List<Products>>(st);

这两个都是正确的,但是由于您已经有了ProductEntity,所以我建议使用第一个。另一个次要的东西,类名应该是单数