2016-06-28 3 views
0

Json.netを使用して、インターフェイスオブジェクトを含むバスケットをデシリアライズしたいとします。 この...インターフェイスオブジェクトのリストのシリアライズ

{ 
"Owner": "John", 
"Fruit": [ <an apple object>, <a pear>, etc... ] 
} 

...これに入る必要があります...

class Basket 
{ 
string Owner; 
List<iFruit> Fruit; //contains instances of Apple, Pear,... 
} 

インタフェースは、インスタンス化することはできませんので、具体的なオブジェクトへの変換が必要とされています。 JsonConverterを使って具体的なAppleとPearのインスタンスを作成する例が見つかりました。 JsonConverterだけフルーツリスト内のオブジェクトのために使用され、私は全体のバスケットをデシリアライズするにはどうすればよい

List<iFruit> fruit = JsonConvert.DeserializeObject<List<iFruit>>(json, new FruitConverter()); 

、:しかし、リストは常にのようなラインで直接作成されましたか?

+2

「IFruit」インターフェースまたは「Fruit」メンバーのいずれかで['JsonConverterAttribute'](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonConverterAttribute.htm)を使用することができます。 – Blorgbeard

+0

はい、もちろんです。それはそれと同じくらい簡単です。インタフェース定義の属性。ありがとうございました! (これを最善の答えとしたい場合は、下にそれを繰り返してください。) –

+0

それは大丈夫です、私は本当にあなたにヒントを与えました。自分で回答を投稿し、それを受け入れることができます。 – Blorgbeard

答えて

1

問題の解決方法は簡単です。追記として

[JsonConverter (typeof(IFruitConverter))] 
public interface iFruit 
    { 

    } 

、コンバータはthis answerに基づいています。 falseを返すコンバータにCanWriteのオーバーライドを追加しました。これにより、シリアル化中に無視され、デシリアライズ時にのみ再生されます。 @Blorgbeardに感謝します!

関連する問題