【发布时间】:2020-06-17 16:33:08
【问题描述】:
我的问题与this one 非常相似。我尝试调整他们的解决方案以满足我的需求,但似乎无法为我的 JSON 找出解决方案。
以下是 JSON 的示例:
{
"0fea8f8a-4169-495d-8307-50bc333fd87d": {
"serviceId": "4cb9125a-1eaa-4bd4-a473-cfccec0f3c63"
},
"0564d078-94f5-4f97-8398-b9f58a51f70b": {
"serviceId": "00000000-0000-0000-0000-000000000000"
},
"f9a165d2-967d-4733-8599-1074270dae2e": {
"serviceId": "00000000-0000-0000-0000-000000000000"
},
"86ccdsbf-e7ad-4851-93ff-6ec817469c1e": {
"serviceId": "00000000-0000-0000-0000-000000000000"
}
}
如您所见,它是一系列(不是数组)
Id_1 : {serviceId: Id_2}
我认为这可以最简单地在 C# 类中表示为:List<KeyValuePair<string, string>>,基本上是<Id_1, Id_2> 的列表,但我对替代方案持开放态度。
这是我根据上面链接的帖子尝试的解决方案:
class PolicyMetadata
{
[JsonConverter(typeof(MetadataConverter))]
public KeyValuePair<string,string>[] idPairs { get; set; }
}
class MetadataConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// deserialize as object
var pairs = serializer.Deserialize<JObject>(reader);
var result = new List<KeyValuePair<string, string>>();
// create an array out of the properties
foreach (JProperty property in pairs.Properties())
{
var pair = property.Value.ToObject<KeyValuePair<string, string>>();
result.Add(pair);
}
return result.ToArray();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(KeyValuePair<string, string>[]);
}
}
我在这里称它为:
var response = JsonConvert.DeserializeObject<PolicyMetadata>(content);
但这会导致 null 值,所以我肯定做错了什么。我尝试在整个 ReadJson 方法中放置断点和打印语句,但它们从未被触发,所以我不确定该代码是否真的在运行。
【问题讨论】:
标签: c# .net json deserialization