2016-09-07 12 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); 

と(..)メソッドを送信しますが、私は、変数OBJをインスタンス化すると、プログラムがあるため、無限再帰に陥っている

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

、ありますベースクラスの "データ"

コードを変更するにはどうすればよいですか?

答えて

1

無限の再帰はシリアル化されデータプロパティ、によって引き起こされる - このの直列化を引き起こし、ループが開始されます。

最高の解決策は、単にプロパティにメソッドを変更するだけです。メソッドはシリアル化されず、目的に適しています。不動産で死んでいる場合は、http://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htmでプロパティをマーキングすると、シリアル化中に無視されます。

関連する問題