Извлечение JSON данных из C# вложенного словарного объекта с помощью JavaScriptSerializer () - PullRequest
0 голосов
/ 11 апреля 2020

При попытке извлечь данные из JSON с использованием JavaScriptSerializer, особые трудности возникают при просмотре типа data типа object. На основании приведенных ниже примеров данных был написан следующий код:

var serializer = new JavaScriptSerializer();
dynamic outp = serializer.DeserializeObject(out3);            
var a = outp["Number"]; // is OK, returns "1"
var b = outp["Description"]; // stuck in looking through "Description" to access "address", then extract the value of "street_2", as an illustration.

Обратная связь (без учета в идеале определение class с соответствующим properties) будет в значительной степени оценили. Спасибо.

{
  "Number": 1,
  "Description": [
    {
      "id": "PO1234",
      "country": "TE",
      "No": "4050",
      "safeNo": "LU37",
      "name": "stuck",
      "address": {
        "street_1": "adhoc, 0098, country",
        "street_2": "94 street",
        "city": "stackoverflow",
        "zip": "stack"
      },
      "is_EU": "Y",
      "conti": "E",
      "date": "2019-08-14T21:43:02.000Z"
    }
  ]
}

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Поскольку Description является массивом, вы можете задать первый элемент по индексу и получить доступ к его свойствам по ключу, аналогично Number. Под капотом каждый элемент Description (а также адрес) равен Dictionary<string, object>

var serializer = new JavaScriptSerializer();
dynamic outp = serializer.DeserializeObject(out3);  

var a = outp["Number"]; 
var b = outp["Description"][0];
var name = b["name"];
var street = b["address"]["street_2"];

Однако, использование JavaScriptSerializer не рекомендуется, вам следует использовать Json. Net вместо

0 голосов
/ 11 апреля 2020

Вы можете использовать Newtonsoft.Json, чтобы десериализовать его так:

static string Test()
{
    var filePath = "../../../response.json";
    var text = File.ReadAllText(filePath);

    var result = JsonConvert.DeserializeObject<JObject>(text);

    var data = result
        .GetValue("Description")
        .Select(t => t.Value<JObject>("address"))
        .First()
        .Value<string>("street_2");

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