小编CGR*_*CGR的帖子

带有嵌套对象的JSON.NET CustomCreationConverter

这是我在这个网站上提出的第一个问题,如果我错过了什么,请原谅我.

我在使用JSON.NET反序列化复杂对象图时遇到了一些问题.我的类层次结构(简化)如下:

public abstract class BusinessObjectBase
{
    protected BusinessObjectBase(SerializationContext context)
    {
    }
}

public class TestBusinessObject : BusinessObjectBase
{
    protected TestBusinessObject(SerializationContext context)
        : base(context)
    {
    }

    public NestedObject InnerObject { get; set; }
}

public class NestedObject : BusinessObjectBase
{
    protected NestedObject(SerializationContext context)
        : base(context)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这些类没有默认的ctor,而是一个专用的自定义反序列化ctor(除了带参数的其他公共ctor),如示例所示.要创建一个实例,我编写了一个自定义创建转换器,如下所示:

internal class BusinessObjectCreationConverter : CustomCreationConverter<BusinessObjectBase>
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(BusinessObjectBase).IsAssignableFrom(objectType) && !objectType.IsAbstract;
    }

    public override BusinessObjectBase Create(Type objectType)
    {
        var businessObject = objectType.CreateUsingDesrializationConstructor<BusinessObjectBase>();
        return businessObject;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# serialization json.net object-graph json-deserialization

5
推荐指数
1
解决办法
3470
查看次数