2017-02-11 2 views
0

Я пытаюсь использовать Newtonsoft.Json для десериализации ниже JSON по csv но не удалось. Я не могу правильно определить схему JSON и, таким образом, не удалось.Как преобразовать вложенный JSON в csv в C#?

Ввод JSON:

{ 
"2017-02-11": 
    { 
    "Table1": [ 
    { 
     "code": "code day1.1.1", 
     "no": "no day1.1.1" 
    } 
    ], 
    "Table2": [ 
    { 
     "code": "code day1.2.1", 
     "no": "no day1.2.1" 
    }, 
    { 
     "code": "code day1.2.2", 
     "no": "no day1.2.2" 
    } 
    ] 
}, 
"2017-02-12": 
    { 
    "Table1": [ 
    { 
     "code": "code day2.1.1", 
     "no": "no day2.1.1" 
    }, 
    { 
     "code": "code day2.1.2", 
     "no": "no day2.1.2" 
    } 
    ], 
    "Table2": [ 
    { 
     "code": "code day2.2.1", 
     "no": "no day2.2.1" 
    } 
    ] 
} 
} 

Выход CSV:

,,code,no 
2017-02-11,Table1,code day1.1.1,no day1.1.1 
,Table2,code day1.2.1,no day1.2.1 
,,code day1.2.2,no day1.2.2 
2017-02-12,Table1,code day2.1.1,no day2.1.1 
,,code day2.1.2,no day2.1.2 
,Table2,code day2.2.1,no day2.2.1 

Когда я пытаюсь использовать

DataSet dataSet = Newtonsoft.Json.JsonConvert.DeserializeObject<DataSet>(content). 

Это возвращает исключение.

+0

Вы можете десериализовать этот JSON для 'IDictionary ' просто путем выполнения var dataSets = JsonConvert.DeserializeObject > (content); '. Пример [скрипка] (https://dotnetfiddle.net/ZIMrU0). Ответит ли это на ваш вопрос или вы также спрашиваете, как написать файл CSV? – dbc

ответ

0

При десериализации объекта возвращаемый тип требует свойств, соответствующих свойствам имен объектов в JSON.

Ваш JSON использует даты как имена объектов, которые, как я полагаю, означает, что эти значения являются динамическими. Если они являются динамическими, то я бы рекомендовал использовать

var dynamicResults = JSON.Decode(content); 

Decode возвращает динамический тип списка, который может быть петельным через, оттуда вы можете связать свои результаты каждого динамический в новый тип DataSet.

Смежные вопросы