2016-09-09 2 views
-4

У меня возникла проблема десериализации и определение этой структуры JSON было бы здорово получить некоторую помощь. Я вернул это обратно к последней известной рабочей позиции, потому что я просто ухожу от рельсов.C# Deserialize JSON array

мой JSON stucture является:

[{ 
"name": "Name1", 
"description": "Description of this process", 
"Location": "ANY", 
"SubItems": [{ 
    "name": "sub1", 
    "required": true, 
    "description": "This is a short description" 
}, { 
    "name": "sub2", 
    "required": true, 
    "description": "This is a short description" 
}, { 
    "name": "sub3", 
    "required": true, 
    "description": "This is a short description" 
}], 
"outputs": [{ 
    "name": "out1", 
    "required": false 
}, { 
    "name": "exit code", 
    "required": false 
}] 
}, { 
    "name": "Name2", 
    "description": "This is a short description", 
    "Location": "ANY", 
    "SubItems": [{ 
     "name": "sub1", 
     "required": false, 
     "description": "This is a short description" 
     }] 
    }] 

Вот мои C# JSon определений, которые были в последний рабочий.

public class JsonObject 
{ 
    [JsonProperty("name")] 
    public string ProcessName { get; set; } 

    [JsonProperty("description")] 
    public string ProcessDescription { get; set; } 

    [JsonProperty("Location")] 
    public string KnownLocation { get; set; } 
} 

Я только фиксирую пару определений на данный момент для тестирования.

Вот мой десериализации объект

var Object = JsonConvert.DeserializeObject <List<JsonObject>>(txt); 
      foreach (JsonObject JsonObject in Object) 
      { 
       Console.WriteLine("Name: " + JsonObject.ProcessName); 
       Console.WriteLine(); 
       Console.WriteLine("Description: " +JsonObject.ProcessDescription); 
       Console.WriteLine(); 
      } 

Так как я сказал, что я могу получить по крайней мере, первые элементы 3 самый верхний уровень JSON в выходном сигнале. Проблема начинается, когда я начинаю пытаться получить «SubItems» и «выходы»

Я следил за структурой связанного сообщения ниже и очень старался это понять, но через некоторое время я понял, что решение не для этого вопрос. У меня просто есть многомерный массив JSON-объекта. Буквально имеет верхний ярус, и 2 суб ярусы

Я пытался попробовать сделать ...

List<List<JsonObject>>Object = JsonConvert.DeserializeObject <List<List<JsonObject>>>(txt); 

и пытались иметь 2 списков же с разными именами с 3 наборами JSON определений.

и реализован многоуровневый цикл просмотр, но тогда я был не в состоянии получить доступ к определениям для самого верхнего JSON, и ничего не писало для реальных элементов «подпункты»

Что мне нужно, чтобы получить для каждого объекта.

How to deserialize a json file with multidimensional array to convert it to object in c#

Связанные Issue

+3

Это не похоже, что ваш массив многомерный, только ваш JsonObject имеет массив внутри. –

+1

То, что JSON недействительно. Загрузите на http://jsonlint.com/, и вы увидите различные ошибки. Можете ли вы [изменить] ваш вопрос включить JSON, который [воспроизводит] (https://stackoverflow.com/help/mcve) проблему? – dbc

+0

Raderick, то есть определение многомерного массива. – Autonomic

ответ

2

Это не мульти массив х мерная. Просто объекты массива, содержащие массивы. Так что ваша модель может быть следующим

public class SubItem 
{ 
    public string Name { get; set; } 
    public bool Required { get; set; } 
    public string Description { get; set; } 
} 

public class Output 
{ 
    public string Name { get; set; } 
    public bool Required { get; set; } 
} 

public class JsonObject 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Location { get; set; } 
    public List<SubItem> SubItems { get; set; } 
    public List<Output> Outputs { get; set; } 
} 

и вы можете десериализации в

var obj = JsonConvert.DeserializeObject<List<JsonObject>>(jsonstring); 

PS: Вы можете использовать JsonProperty, чтобы украсить эту модель, как вы в вопросе

+0

Привет, Л.Б. спасибо за ваше решение! Я реализовал эту модель, как вы указали выше. Поэтому, когда я запускаю это, SubItems пустые, как и выходные. Итак, я пробовал цикл foreach через SubItems внутри цикла foreach, который прерывается с помощью: System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. – Autonomic

+0

Кроме того, всякий раз, когда я уничтожаю ссылку JsonPropery, я получаю пустой список. – Autonomic

+0

Прогресс! У меня есть 2 петли foreach внутри основного цикла. Еогеаспа (ли-OBJ в Object) { Еогеаспа (вар входы в Object.InputsParams) {// Вывод на консоль} Еогеаспа (вар выходы в Object.OutputParams {// Вывод на консоль}} Я получаю обратно некоторые данные, наконец, однако, не все эти объекты Json имеют «Output», и мой код продолжает задыхаться. На самом деле я даже не уверен. Я просто знаю, что выходные данные не всегда существуют или даже перечислены в модели JSON в обратном. Необработанное исключение: System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. – Autonomic