.Net中的接口和JSON序列化

时间:2011-08-29 22:36:36

标签: .net json serialization interface

是否有.Net的JSON库允许我序列化/反序列化包含接口的类:

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

我意识到反序列化需要具体的类,所以我假设它们需要通过属性或方法调用的一部分来指定。

编辑:一个额外的要求 - 它不应该依赖JSON上的任何标记或特殊属性来进行序列化/反序列化,因为有时我需要从第三方读取JSON。

2 个答案:

答案 0 :(得分:1)

托管使用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));

答案 1 :(得分:0)

您可以使用允许您使用DataContractJsonSerializerknown types课程。