1

私はC#.NET 4.0、NewtonsoftJSON4.5.0を使用しています。

public class Recipe
{
   [JsonProperty(TypeNameHandling = TypeNameHandling.All)]
   public List<IFood> Foods{ get; set; }
   ...
 }

このRecipeオブジェクトをシリアル化および逆シリアル化したい。アプリケーションの存続期間中にオブジェクトをシリアル化および逆シリアル化すると、これは成功しますが、オブジェクトをシリアル化してアプリケーションを終了してから逆シリアル化すると、例外がスローされ、IFoodをインスタンス化できません(インターフェイスであるため)。

問題は、インターフェースの実装がシリアル化されないことです。

"$ type": "System.Collections.Generic.List`1 [[NSM.Shared.Models.IFood、NSMShared]]、mscorlib"

TypeNameHandling.ObjectとArrayandAutoを使用してみましたが、役に立ちませんでした。正しくシリアル化する方法はありますか?または、少なくとも逆シリアル化する前にクラスマッピングを定義するには?

編集:オブジェクトを内部でシリアル化および逆シリアル化するCouchDBのC#ドライバーであるHammock( http://code.google.com/p/relax-net/ ) と組み合わせたJSONを使用しています。前述のように、問題は、インターフェイスの実装がシリアル化されないことです。

4

1 に答える 1

4

コレクション内のアイテムの処理方法を定義するため、このプロパティを追加する必要があります。

[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]

public class Recipe
{
    [JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]
    public List<IFood> Foods{ get; set; }
    ...
}
于 2012-09-08T08:01:02.653 に答える