如上图,实体类转json的时候,怎么才能去掉null值。
javscript删除对象(包括数组)中值为undefined,null的属性
用Json.Net,在调用JsonConvert.SerializeObject()时使用NullValueHandling.Ignore:
string ignored = JsonConvert.SerializeObject(
movie,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
详见:Reducing Serialized JSON Size
这个也行:
要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉。
在这里我使用Newtonsoft.Json.dll
记录一下序列化以及反序列化
json字符串转对象
Model model=JsonConvert.DeserializeObject(val);
将对象转化为json格式字符串
string jsonString = JsonConvert.SerializeObject(obj);
那么如何序列化为json时过滤掉NULL呢??
var jsonSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};
var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);
直接这样JsonConvert.SerializeObject(obj);序列化结果
"MemberQuery": {
"PhoneNumber": "13222222222",
"Name": "test",
"MF": "女",
"BirthDate": "01/01/2017",
"MaritalStatus": null,
"Country": null
}
过滤掉NULL序列化结果:
"MemberQuery": {
"PhoneNumber": "13222222222",
"Name": "test",
"MF": "女",
"BirthDate": "01/01/2017"
}
用Newtonsoft这个类库,用JObject ju = JObject.Parse(jsonstr);把变量jsonstr里的json字符串转换成对象,用键值取值:ju["rankNo"].ToString()。
如果对应值是null,返回的是空白字符串。
1.自定义序列化类,从DataContractJsonSerializer类继承,重写某些方法(具体重写哪些方法我也不知道,没使用过)。
2.取得obj的每个非NULL的属性值,赋给一个新的变量,然后再对新变量进行序列化
///
/// List转成json 数据共用方法,根据传属性名得到相关转换
///
/// 转换的实体集合
/// 实体类对应的属性
/// 转换后的属性显示名
///
public static string GetJsonData(IList list, string propertyName, string jsonShowName)
{
string[] propertyNameArr = propertyName.Split(',');//实体类属性
string[] jsonShowNameArr = jsonShowName.Split(',');//转化为UI实用属性名
StringBuilder Json = new StringBuilder();
Json.Append("[");
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
Type type = list[i].GetType();
Json.Append("{");
for (int j = 0; j < propertyNameArr.Length; j++)
{
PropertyInfo property = type.GetProperty(propertyNameArr[j]);
if (property != null)
{
Json.Append(jsonShowNameArr[j]);
if ("content".IndexOf(jsonShowNameArr[j]) >= 0)
{
Json.Append(":");
}
else
{
Json.Append(":'");
}
Json.Append(StringFormat(property.GetValue(list[i], null) == null ? "" : property.GetValue(list[i], null).ToString(), type));
if ("content".IndexOf(jsonShowNameArr[j]) >= 0)
{
//Json.Append("");
}
else
{
Json.Append("'");
}
}
if (j < propertyNameArr.Length - 1)
{
Json.Append(",");
}
}
Json.Append("}");
if (i < list.Count - 1)
{
Json.Append(",");
}
}
}
Json.Append("]");
return Json.ToString();
}
应该用Newtonsoft这个类库吧