Десериализовать преобразование типа JSON-массива Object в c # class - PullRequest
0 голосов
/ 25 октября 2018

Я получаю данные JSON от [HttpPost] в следующем формате.Я хочу десериализовать до двух моделей 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"      
    }
  ]
}}

Я могу получить данные заголовка, но массив элементов.

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.И data JSON происходит от 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; }
    }

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если у вашего data нет двух {{, ваш код должен работать.Но вы можете сделать это без приведения к string , просто:

var purHeader = data.ToObject<PurHeader>();
var purDetails = data["items"].ToObject<PurDetail[]>();
0 голосов
/ 25 октября 2018

Ваш 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к объекту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...