2013-03-30 2 views
3

У меня есть Dictionary<string,int[]>, что мне нужно сериализовать в JSON. Использование форматирования по умолчанию, я получаюSerialize Dictionary - как переименовать ключ и значение

{"blah": [0,1,2,3], "yada": [0,1,2,3]} 

Что мне нужно что-то вроде этого

[{ name: "blah", data: [0,1,2,3]}, name: "yada", data: [0,1,2,3] }] 

Какой самый лучший/простой способ для достижения этой цели? Должен ли я писать собственный класс сериализатора? Или есть другой тип коллекции, который будет работать лучше, чем Словарь?

+0

Итак, у вас есть словарь > '? – nemesv

+0

Словарь Jason

ответ

2

С немного LINQ вы можете легко превратить ваш словарь в свой формат:

var dict = new Dictionary<string, int[]> 
    { 
     {"blah", new[] {0, 1, 2, 3}}, 
     {"yada", new[] {0, 1, 2, 3}} 
    }; 
var transformedData = dict.Select(e => new {name = e.Key, data = e.Value}); 
var json = JsonConvert.SerializeObject(transformedData); 

Или вы можете создать собственный JsonConverter, которые делают это преобразование.

+0

отличное предложение, спасибо! Только проблема заключается в том, что имя и данные сериализуются как «имя» и «данные». Есть идеи? – Jason

+0

Формат JSON использует кавычки вокруг имен атрибутов. Так строго говоря: «[{name:« blah », data: [0,1,2,3]}, name:« yada », data: [0,1,2,3]}]' ** не является действительный документ JSON **, потому что «имя» и «данные» не цитируются. Однако с некоторыми взломами JSON.net можно убедить не генерировать действительный JSON: http://stackoverflow.com/questions/7553516/json-net-serialize-property-name-without-quotes – nemesv

+0

Вы правы, это isn Это действительно проблема. Еще раз спасибо. – Jason

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