【问题标题】:Deserialize JSON array Object to c# class type conversion反序列化JSON数组对象到c#类类型转换
【发布时间】:2018-10-25 16:30:13
【问题描述】:

我从[HttpPost] 获得以下格式的 JSON 数据。我想反序列化为两个 C# 模型。

data {{ 
  "invoiceNumber": "55",
  "invoiceDate": "2018-10-25T13:16:37.843Z",
  "invoiceValue": 55,
  "remarks": null,'
  "items": [
    {
      "gRNNo": "0000000",
      "itemCode": 1,
      "itemDesc": "Lux",
      "qty": "2",      
    },
    {
      "gRNNo": "0000000",
      "itemCode": 2,
      "itemDesc": "Rexona",
      "qty": "1"      
    }
  ]
}}

我可以获取 Header 数据,但可以获取 items 数组。

PurHeader purHeader = JsonConvert.DeserializeObject<PurHeader>(data.ToString()); //Working for Header

但未能获取数组数据。我试过了。

    List<PurDetail> purDetail = JsonConvert.DeserializeObject<List<PurDetail>>(data["items"].ToString());
var purDetail = JsonConvert.DeserializeObject<PurDetail[]>(data["items"].ToString());

我的课程 - 我在 Code First 中使用它们。而datajson 来自Angular 7 ReactiveForms

public class PurHeader
    {        
        public string GRNNo { get; set; }        
        public string InvoiceNumber { get; set; }
        public DateTime InvoiceDate { get; set; }
        public decimal InvoiceValue { get; set; }
        public string Remarks { get; set; }

        public ICollection<PurDetail> PurDetail { get; set; }
    }

public class PurDetail
    {
        public string GRNNo { get; set; }
        public string ItemCode { get; set; }
        public string ItemDesc { get; set; }
        public decimal Qty { get; set; }

        [ForeignKey("GRNNo")]
        public PurHeader PurHeader { get; set; }
    }

【问题讨论】:

  • 你能发布 C# 类吗?我不知道PurHeaderPurDetails 是什么...
  • 你的data对象是什么类型的?
  • 您写过“数据 json 来自 Angular 7 ReactiveForms” 但是您的 ASP.NET 代码中的数据类型是什么?说到控制器。
  • 作为 [FromBody] JObject 数据接收。需要发送到 PurHeader 和 PurDetail 数组。

标签: c# json asp.net-core-2.1


【解决方案1】:

您的 JSON 格式不正确,我希望这只是您的问题中的一个错字。但是,您应该能够使用这些类解析整个集合:

public class Rootobject
{
  public string invoiceNumber { get; set; }
  public DateTime invoiceDate { get; set; }
  public int invoiceValue { get; set; }
  public object remarks { get; set; }
  public Item[] items { get; set; }
}

public class Item
{
  public string gRNNo { get; set; }
  public int itemCode { get; set; }
  public string itemDesc { get; set; }
  public string qty { get; set; }
}

Rootobject purHeader = JsonConvert.DeserializeObject<Rootobject>(data.ToString());

另请参阅我关于如何轻松从 XML 派生类的答案(同样适用于 JSON):Parse This XML to object

【讨论】:

  • 它给了我空值。
  • 我能够解析它(在修复提供的 JSON 之后)。您可以将上面的 JSON 修复为您正在使用的实际数据吗?正如我上面提到的,您显示的 JSON 格式不正确。
  • 在您的回答中,您提到 json 格式错误,但数据来自 Angular 7 ReactiveForms。我不做任何操作。
  • 本节末尾的撇号是什么意思:"remarks": null,'?
【解决方案2】:

假设您的data 没有两个{{,您的代码应该可以工作。 但是你可以在不强制转换为 string 的情况下做到这一点,只需:

var purHeader = data.ToObject<PurHeader>();
var purDetails = data["items"].ToObject<PurDetail[]>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多