来自服务器的我的json数组可以包含空字符串元素。我想在反序列化级别将其删除。
{
"Highlights":[
"Þingvellir National Park",
"Gullfoss Waterfall",
"Geysir Geothermal Area",
"Laugarvatn","Kerið Crater",
"Hveragerði Hot Spring Area",
"",
""
]
}
型号:
public class TestModel
{
public List<string> Highlights { get; set; }
}
我希望如果元素为string.IsNullOrEmpty (element) == true
,则不将其添加到数组中。
在这种情况下,TestModel.Highlights
数组中反序列化后的元素数应为6,而不是8,因为其中2个元素为空。
我该如何实现?
答案 0 :(得分:1)
最简单的方法是遍历集合,并按照注释中的建议检查null或空字符串。
较难且丑陋的方法(针对这种情况)是根据this答案创建自定义JsonConverter
,例如:
class IgnoreEmptyItemsConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof(List<T>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
List<T> list = new List<T>();
JArray array = JArray.Load(reader);
foreach (var obj in array)
{
// really custom way (not really generic)
if (!String.IsNullOrEmpty(obj.ToString()))
{
list.Add(obj.ToObject<T>(serializer));
}
}
return list;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
,它可以在您的模型中使用,例如:
public class RootObject
{
[JsonConverter(typeof(IgnoreEmptyItemsConverter<string>))]
public List<string> Highlights { get; set; }
}