嗨,我正在使用下面的课程
Public List<string> name;
Public List<string> midname;
一旦我对其进行序列化,我将得到以下输出,例如
{"name":[hari],"midname":null}
但我希望我的答案是这样的
{"name":[hari]}
它不应该显示具有空值的类属性,并且我正在使用 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; }
就像 pswg 所说,最好首先正确序列化。可以在此处查看不带空值的序列化示例
例如
var json = JsonConvert.SerializeObject(
objectToSerialize,
new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore});
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(); }
}
}
以下是您将如何利用上述内容,它将忽略空值。
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new NullPropertiesConverter() });
return serializer.Serialize(someObjectToSerialize);
字符串签名Json = JsonConvert.SerializeObject(签名,Newtonsoft.Json.Formatting.Indented,新 JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
您可以使用 Newtonsoft.json 中的 JsonConvert 而不是 JavaScriptSerializer
var result = JsonConvert.SerializeObject(obj,
new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore
});