【发布时间】:2017-08-22 13:24:25
【问题描述】:
以下是我的Json serialization 代码和CustomResolver,最后检查实际和预期结果之间的差异。我无法从最终结果中删除空元素。有一个可用的选项here,但在我使用ASP.Net Web API 的实际应用程序中,我无权调用JsonConvert.SerializeObject,它是自动调用的,可能需要在Custom Contract Resolver 中执行此操作,任何帮助/指针都会很棒
void Main()
{
var cbList = new List<CustomerBusiness>();
cbList.Add(new CustomerBusiness { Id = null, Name = null, PhoneNumber = null });
cbList.Add(new CustomerBusiness { Id = 1, Name = null, PhoneNumber = null });
cbList.Add(new CustomerBusiness { Id = null, Name = "Mrinal", PhoneNumber = null });
cbList.Add(new CustomerBusiness { Id = null, Name = null, PhoneNumber = "9886623261" });
cbList.Add(new CustomerBusiness { Id = null, Name = null, PhoneNumber = null });
cbList.Add(new CustomerBusiness { Id = null, Name = null, PhoneNumber = null });
var serializedData = JsonConvert.SerializeObject(cbList, Newtonsoft.Json.Formatting.Indented,new JsonSerializerSettings { ContractResolver = new CustomResolver() });
serializedData.Dump();
}
public class CustomResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> retval = base.CreateProperties(type, memberSerialization);
retval = retval.Select(p =>
{
p.PropertyName = char.ToLower(p.PropertyName[0]) + string.Join("", p.PropertyName.Skip(1));
p.NullValueHandling = NullValueHandling.Ignore;
return p;
}).ToList();
return retval;
}
}
public class CustomerBusiness
{
public int? Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
}
实际结果:
[
{},
{
"id": 1
},
{
"name": "Mrinal"
},
{
"phoneNumber": "9886623261"
},
{},
{}
]
预期结果:
[
{
"id": 1
},
{
"name": "Mrinal"
},
{
"phoneNumber": "9886623261"
}
]
【问题讨论】:
-
亲爱的投反对票的人,如果你真的对自己的观点有信心,请至少了解为什么投反对票的基本礼貌
标签: c# json asp.net-web-api json.net