我正在使用 Json.Net 将 JSON 解析为我的应用程序逻辑。 问题是我从中获取 JSON 的外部 API 有时在其列表中包含“空”项。 我想在解析时从列表(或任何其他可能具有该值的 IEnumerable)中删除那些“空”项。 我相信解决方案必须使用 JsonConverter,但到目前为止我无法让它工作。
MyData data = new MyData();
Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings
{
Converters = new List<JsonConverter>() { new TrimNullListValues() }
};
string jsonString = @"{""ListData"": [{""source"" : 10 , ""target"" : 20, ""Data"" : [{""source"" : 100 , ""target"" : 200}, null]}, null]}";
JsonConvert.PopulateObject(jsonString, data, settings);
MyData 类是这样的:
public class MyData {
public class MyNestedData
{
public int Source;
public int Target;
public List<MyNestedData> Data;
}
public List<MyNestedData> ListData;
}
我的 JsonConverter (TrimNullListValues) 是这样的:
public class TrimNullListValues : JsonConverter {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Don't really know what to do in here to remove unwanted values
// From the IEnumerabes
}
public override bool CanConvert(Type objectType)
{
return objectType.IsGenericType && objectType.GetGenericTypeDefinition() == typeof(List<>);
}
}
最佳答案
你可以尝试这样的事情:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray array = JArray.Load(reader);
foreach (JToken item in array.ToList())
{
if (item.Type == JTokenType.Null)
item.Remove();
}
object list = Activator.CreateInstance(objectType);
serializer.Populate(array.CreateReader(), list);
return list;
}
fiddle :https://dotnetfiddle.net/SESCfZ
关于c# - 使用 Json.Net 解析 JSON 时如何从 IEnumerables 中删除空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054600/