2016-09-07 72 views
1

我想序列化對象並將它傳遞給哪個參數類型是對象的父對象的方法。如何序列化派生類到基類?

例如,我有這個類。

public class Base 
{ 
    public string TypeName => GetType().Name; 
    public string Data => JsonConvert.SerializeObject(this); 
} 

public class Derived : Base 
{ 
    public string Name { get; set; } 
    public int data1 { get; set; } 
    public int data2 { get; set; } 
} 

public class Derived2 : Base 
{ 
    ... 
} 

.... 

我寫的代碼如下,

var obj = new Derived { Name = "John", data1 = 2000, data2 = 1500 }; 
Send(obj); 

併發送(..)的方法是,

public void Send(Base info) 
{ 
    // Do Something with "info". 
} 

當我實例變量OBJ,程序已經陷入無限遞歸因爲基類中的「數據」。

如何更改代碼?

回答

1

無限遞歸由數據屬性,它是串行化引起 - 引起的序列化和循環開始。

最好的解決方案是簡單地將屬性更改爲方法,該方法不會被序列化並更好地達到目的。如果你的財產已經死了 - 你可以嘗試用http://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm來標記該財產,這將導致在序列化過程中被忽略。