16

こんにちは、私は以下のクラスを使用しています

Public List<string> name;
Public List<string> midname;

シリアル化すると、次のような出力が得られます

 {"name":[hari],"midname":null}

しかし、私は私の答えがこのようになりたいです

{"name":[hari]}

null 値を持つクラス属性を表示するべきではありません。私は c# .net フレームワークを使用しています。

4

6 に答える 6

21

完全な答えは、クラスをどのようにシリアル化するかによって異なります。

データコントラクトを使用してクラスをシリアル化する場合は、EmitDefaultValue = false

[DataContract]
class MyClass
{
    [DataMember(EmitDefaultValue = false)]
    public List<string> name;

    [DataMember(EmitDefaultValue = false)]
    public List<string> midname { get; set; }
}

Json.Netを使用している場合は、代わりにこれを試してください

class MyClass
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public List<string> name;

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public List<string> midname { get; set; }
}

または、グローバルに設定しますJsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore

于 2013-03-22T15:51:34.470 に答える
11

あなたが使用しているなら、あなたはJson.Netこのようにあなたの財産を飾ることによってこれを試すことができます

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public List<string> name { get; set; }
于 2013-03-22T15:53:02.473 に答える
3
private class NullPropertiesConverter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        var jsonExample = new Dictionary<string, object>();
        foreach (var prop in obj.GetType().GetProperties())
        {
            //check if decorated with ScriptIgnore attribute
            bool ignoreProp = prop.IsDefined(typeof(ScriptIgnoreAttribute), true);

            var value = prop.GetValue(obj, BindingFlags.Public, null, null, null);
            if (value != null && !ignoreProp)
                jsonExample.Add(prop.Name, value);
        }

        return jsonExample;
    }

    public override IEnumerable<Type> SupportedTypes
    {
        get { return GetType().Assembly.GetTypes(); }
    }
}

以下は、上記を利用する方法であり、null 値を無視します。

var serializer = new JavaScriptSerializer();
    serializer.RegisterConverters(new JavaScriptConverter[] { new NullPropertiesConverter() });
    return serializer.Serialize(someObjectToSerialize);

ソース

于 2013-03-22T15:55:37.487 に答える