繁体   English   中英

JsonSerializer未序列化派生的类属性

[英]JsonSerializer not serializing derived class properties

我有一个类似下面的类,该类已添加到项目/解决方案中作为参考

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

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

很少有其他类没有添加到引用中,而是动态加载的,这些类是从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);

在这里,当我尝试对FileContents对象进行序列化时,它会跳过派生类中可用的属性(例如,来自RecordStyleA)

这里派生(RecordStyleA)类是有条件加载的,其属性也可能根据条件而有所不同。 驱动类是动态创建的。

请帮我解决这个问题

首先,应避免DTO中的继承 ,如果必须使用它,则应该使基类abstract以便ServiceStack序列化程序知道何时发出动态类型信息。

请注意,用于序列化为JSON的2种最常见的API是使用静态JsonSerializer类,例如:

var json = JsonSerializer.SerializeToString(result);

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

var json = result.ToJson();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM