2016-06-01 17 views
1

で追加のキーを削除するには:どのように私はこのようなクラスを持っているJSON

string output= JsonConvert.SerializeObject(provinces, Formatting.None, 
        new JsonSerializerSettings() 
        { 
         ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
        }); 

public class Province 
{ 
    public string name { get; set; } 
    public List<Province> Cities { get; set; } 
    public virtual Province parent { get; set; } 

    public Province() 
    { 
     Cities = new List<Province>(); 
    } 
} 

と、私はこのクラスのリストを持っていると私はJSONにこれを変換したい、私はこのコードとその素敵なを使用しました

[{"name":"ProvinceName","Cities":[{"name":"CityName","Cities":[]}],"parent":null}, 

は、私が好きな子を持っていけない都市のキーを削除する:

私の結果はbeloweのようなものです

[{"name":"ProvinceName","Cities":[{"name":"CityName"}],"parent":null}, 

どうすればよいですか?

答えて

3

DefaultValueHandlingNullValueHandlingを使用できます。このpageと例を見てください(これは、リストがコンストラクタで初期化されない場合に有効です)。また、独自のコンバータを作成して他のことを行うこともできます。

ここから変更されたサンプルはpageです。このコードは、あなたが望むことをする必要があります。しかし、私はそれをテストしていません。

public class ShouldSerializeContractResolver : DefaultContractResolver 
{ 
    public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver(); 
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) 
    { 
     JsonProperty property = base.CreateProperty(member, memberSerialization); 
     if (property.DeclaringType == typeof(List<Province>) && property.PropertyName == "Cities") 
     { 
      property.ShouldSerialize = 
       instance => 
       { 
        Province province = (Province)instance; 
        return province.Cities != null && province.Cities.Count > 0; 
       }; 
     } 

     return property; 
    } 
} 

オブジェクトをシリアル化するときに、この契約リゾルバを指定します。

string json = JsonConvert.SerializeObject(
    provinces, 
    Formatting.None, 
    new JsonSerializerSettings 
    { 
     ContractResolver = new ShouldSerializeContractResolver() 
    }); 
+0

Iは、文字列出力= JsonConvert.SerializeObject 'のように使用される(地方、Formatting.None、 新しいJsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore });'が、その同じ –

+0

都市決してnullでないbecuse私は新しいリストを作成する –

関連する問題