2013-12-17 4 views
0

Я снова вынимаю волосы. Я работаю над возможными решениями по моему другому вопросу here. У меня есть этот класс:Как я могу сериализовать класс, который реализует IDictionary с Newtonsoft.JSON?

public class PartViewDTO : IDictionary<string, object> 
{ 
    ... 
} 

Он строится с деталями, какие поля следует представлять - имя, партномер, цена и т.д. и т.п.

Я пытаюсь сериализации коллекцию PartViewDTO в качестве ответ для веб-службы, но я не хочу, традиционный словарь сериализации

[ { "Key": "Key1", "Value": "Value1" }, ...] 

Вместо этого я хочу

{ "Key1": "Value1", ... } 

Я попытался несколько вариаций на применение JsonDictionaryAttribute к этому классу:

[Newtonsoft.Json.JsonDictionary(ItemTypeNameHandling=Newtonsoft.Json.TypeNameHandling.Objects)] 
public class PartViewDTO : IDictionary<string, object> 

Но во время выполнения я получаю исключение брошенным, что «PartViewDTO не словарь»

Нижней линия - PartViewDTO является словарь, но я хочу, чтобы он сериализовался, как ключи в словаре, были свойствами класса. Я возвращаю IEnumerable < PartViewDTO> из этих веб-сервисов, поэтому я надеюсь, что атрибут, примененный к самому классу, подскажет JSON о том, как он должен быть сериализован.

Что я делаю неправильно?

ответ

0

Получается, что JSON.NET отлично выполняет сериализацию словарей так, как я хочу. Проблема в том, что он не признает, что мой тип - словарь. Я закончил писать собственный конвертер для PartViewDTO, который сделал словарь-вещь.

Все хорошо сейчас!

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