JsonSerializer不序列化派生类的属性(JsonSerializer not serial

2019-10-23 14:51发布

我有一个类像下面被添加到项目/溶液作为参考

public class FileContents
{
    public List<RecordBase> Records { get; set; }
}

public class RecordBase
{
    public int LineNumber { get; set; }
}

还有未添加到参考,但dynamicaly加载,这些类是从RecordBase类推导如下几个其它的类是如何加载代码段

var fileContents = new FileContents();
var dll = Assembly.LoadFile(derivedClassesAssemblyLocation);
Type type = dll.GetExportedTypes().Where(a =>  
                           a.Name.Equals(className)).FirstOrDefault();
if (type != null && type.Name == className)
{
    dynamic instance = Activator.CreateInstance(type);

    //All properties are populated to the instance
    //.....
    //.....

    fileContents.Records.Add(instance)
}

下面是前面提到的其它类是从RecordBase衍生

public class RecordStyleA : RecordBase
{
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
    public string PropertyC { get; set; }
}

加载和序列化

 var result = new FileContents();
 //Logic to load ....

 var serializer = new ServiceStack.Text.JsonStringSerializer();
 var json = serializer.SerializeToString(result);

这里,当我尝试serilaize的FileContents对象则跳过在派生类可用的属性(例如,从RecordStyleA)

这里派生(RecordStyleA)类加载条件和它的属性也可能会有所不同取决于condion。 该掘进类是动态创建。

请帮我解决这个问题

Answer 1:

首先继承的DTO的应尽量避免 ,如果必须使用它,那么你应该让你的基类abstract所以ServiceStack串行知道什么时候发出的动态类型信息。

注意2层最常见的API序列化到JSON是使用静态JsonSerializer类,如:

var json = JsonSerializer.SerializeToString(result);

.ToJson()/.FromJson()扩展方法,如:

var json = result.ToJson();


文章来源: JsonSerializer not serializing derived class properties