这是原始 JSON 数据的示例:
{ "Standards": { "1": "1" } }
我想将数据反序列化为:
public class Model
{
public HashSet<String> Standards { get; set; }
}
Standards
字段实际上有 Dictionary<String, String>
类型。不知何故键和值总是相等的。由于类型不兼容,我正在寻找一种方法来对此字段执行自定义反序列化。
首选基于 JSON.NET 库的解决方案。
P.S.:我无法控制数据序列化过程。
最佳答案
您可以使用自定义 JsonConverter
来处理这个问题.这是您需要的代码:
public class CustomHashSetConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(HashSet<string>);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
return new HashSet<string>(jo.Properties().Select(p => p.Name));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
HashSet<string> hashSet = (HashSet<string>)value;
JObject jo = new JObject(hashSet.Select(s => new JProperty(s, s)));
jo.WriteTo(writer);
}
}
要使用转换器,请将 [JsonConverter]
属性添加到您的模型中,如下所示:
public class Model
{
[JsonConverter(typeof(CustomHashSetConverter))]
public HashSet<string> Standards { get; set; }
}
然后,只要像往常一样反序列化就可以了:
Model model = JsonConvert.DeserializeObject<Model>(json);
这是一个往返演示:https://dotnetfiddle.net/tvHt5Y
关于c# - 将 JSON 对象反序列化为 .NET HashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592254/