2015-07-02 15 views
1

我有一個類像下面被添加到項目/溶液作爲參考JsonSerializer不序列化時派生類屬​​性

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)類是有條件地裝載並且其屬性也可以根據情況而變化。駕駛的課程在飛行中創建。

請幫我解決這個問題

回答

1

首先inheritance in DTO's should be avoided,如果必須使用它,那麼你應該讓你的基類abstract所以ServiceStack串行知道什麼時候發出的動態類型信息。

注2層最常見的API序列化到JSON是使用靜態JsonSerializer類,如:

var json = JsonSerializer.SerializeToString(result); 

還是.ToJson()/.FromJson()擴展方法,如:

var json = result.ToJson(); 
+0

我做了基類現在抽象它序列化。非常感謝你@mythz – Shiljo