Czy ktoś może mi powiedzieć, jak deserializować JSON do C # (bez użycia C # # Dynamic) obiektu, gdy ciąg JSON ma dynamiczną tablicę danych?

Podane poniżej JSON ma obiekt pudełka i może zawierać tablicę elementów mody (może to być spodnie, sweter, buty, ... itp

{
  "task": {
    "id": 269740275,
    "status": "success",
    "error": null,
    "date_created": "2017-02-16T10:33:41.827688Z",
    "date_updated": "2017-02-16T10:33:42.417778Z",
    "data": {
      "width": 1062,
      "boxes": {
        "top-shirt": [
          {
            "xmin": 0.249980241060257,
            "ymin": 0.1535395532846451,
            "ymax": 0.476559966802597,
            "xmax": 0.6146213412284851,
            "proba": 0.9977585077285767
          }
        ],
        "shoe": [
          {
            "xmin": 0.3686676025390625,
            "ymin": 0.9223044514656067,
            "ymax": 0.9838011264801025,
            "xmax": 0.4768480360507965,
            "proba": 0.9748706817626953
          }
        ],
        "pants": [
          {
            "xmin": 0.3451904654502869,
            "ymin": 0.4616038501262665,
            "ymax": 0.909162700176239,
            "xmax": 0.6047541499137878,
            "proba": 0.9983627200126648
          }
        ]
      },
      "height": 1503
    }
  }
}
2
deep sinha 16 luty 2017, 20:47

1 odpowiedź

Użyj Nuget, aby pobrać pakiet NewTonSoft.json.

Następnie możesz użyć Linq-to-JSON do obsługi tego rodzaju obiektu danych.

Na przykład, zakładając, że przykład JSON jest przechowywany w input,

var message = JObject.Parse(input);
var width = (int)message["task"]["data"]["width"];
var height = (int)message["task"]["data"]["height"];
Console.WriteLine(width + " " + height);

var boxes = message["task"]["data"]["boxes"];
foreach (var box in boxes.Children<JProperty>()) 
{
    Console.WriteLine(box.Name)  ;
}

Jest to dość blisko JavaScript i działa dobrze.

1
O. Jones 16 luty 2017, 18:53