2017-12-07 9 views
0

[JsonObject]属性を適用してシリアル化する方法と同様にIEnumerableをJsonObjectとしてシリアル化したいが、DTOクラスを変更することはできません。この属性を導入する。IEnumerableは、Json.NETで[JsonObject]としてシリアライズします。

(シ)シリアライザにJsonObject(de)シリアライゼーションを強制する方法がありますか?

+0

あなたがシリアライズしたいあなたのクラスとJSONの例を提供してください。それは – Evk

答えて

2

はい、カスタムIContractResolverを使用してこれを行うことができます。あなたがする必要があるのは、Json.NetのDefaultContractResolverから派生するリゾルバクラスを作成し、FooListが列挙型の型に置き換えられている、以下に示すようにCreateContract(Type)メソッドをオーバーライドすることだけです。

class CustomResolver : DefaultContractResolver 
{ 
    protected override JsonContract CreateContract(Type type) 
    { 
     if (type == typeof(FooList)) 
      return CreateObjectContract(typeof(FooList)); 

     return base.CreateContract(type); 
    } 
} 

シリアライザの設定にリゾルバを追加し、あなたがシリアライズ時にこれらの設定を使用します。ここでは

var settings = new JsonSerializerSettings 
{ 
    ContractResolver = new CustomResolver(), 
    Formatting = Formatting.Indented 
}; 

string json = JsonConvert.SerializeObject(yourObject, settings); 

はデモです:https://dotnetfiddle.net/ocyjU4

+0

に非常にクールで正確に私が必要なもの。この例では、実際にオブジェクトとしてシリアライズする追加のメタデータを持つリストが必要でした:-) – Edwin

関連する問題