Интерфейсы и сериализация JSON в .Net - PullRequest
3 голосов
/ 30 августа 2011

Существует ли библиотека JSON для .Net, которая позволяет сериализовать / десериализовать классы, содержащие интерфейсы:

 public class MyClass
 {
    public IMyInterface1 Property1 {get;set;}
    public IMyInterface2 Property2 {get;set;}
 }

Я понимаю, что для десериализации понадобятся конкретные классы, поэтому я предполагаю, что их нужно будет указывать с помощью атрибутов или как часть вызова метода.

Редактировать: одно дополнительное требование - он не должен полагаться на какие-либо маркеры или специальные свойства в JSON для сериализации / десериализации, поскольку иногда мне нужно читать JSON от стороннего производителя.

Ответы [ 2 ]

1 голос
/ 30 августа 2011

удалось сделать это с помощью jayrock . Вам просто нужно создать класс отображения, подобный этому:

public class InterfaceImporter<TInterface, TClass> : IImporter where TClass : TInterface
{
    public object Import(ImportContext context, JsonReader reader)
    {
        return(context.Import<TClass>(reader));
    }

    public Type OutputType
    {
        get { return (typeof(TInterface)); }
    }
}

Затем используйте этот код для сопоставления интерфейсов с соответствующими классами и десериализации:

ImportContext context = new ImportContext();

context.Register(new InterfaceImporter<IMyInterface1, MyClass1>());
context.Register(new InterfaceImporter<IMyInterface2, MyClass2>());

MyClass deserialized = context.Import<MyClass>(JsonText.CreateReader(json));
0 голосов
/ 30 августа 2011

Вы можете использовать класс DataContractJsonSerializer , который позволяет работать с известными типами .

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