您可以使用自定义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
你总是可以编写你自己的'JsonConverter'并用'JsonConverterAttribute'标记属性,如果需要的功能已经不存在的话。 – kiziu
JsonConvert.DeserializeObject(json);你是这样试试吗? –