こんにちは、私は以下のクラスを使用しています
Public List<string> name;
Public List<string> midname;
シリアル化すると、次のような出力が得られます
{"name":[hari],"midname":null}
しかし、私は私の答えがこのようになりたいです
{"name":[hari]}
null 値を持つクラス属性を表示するべきではありません。私は c# .net フレームワークを使用しています。
完全な答えは、クラスをどのようにシリアル化するかによって異なります。
データコントラクトを使用してクラスをシリアル化する場合は、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
あなたが使用しているなら、あなたはJson.Net
このようにあなたの財産を飾ることによってこれを試すことができます
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public List<string> name { get; set; }
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);