C# 用于处理动态密钥名称的JsonConverter
我正在编写处理OpenLibrary响应的代码。这是一个rest服务,它根据传入的ISBN返回书籍。示例URL如下所示: 我有这些物品:C# 用于处理动态密钥名称的JsonConverter,c#,json.net,C#,Json.net,我正在编写处理OpenLibrary响应的代码。这是一个rest服务,它根据传入的ISBN返回书籍。示例URL如下所示: 我有这些物品: public class OLResult { Publishers Publishers { get; set; } // other properties } public class Publishers { // properties go here } 我创建了与OpenLibrary返回的内容相同的C#对象。但是,如果
public class OLResult
{
Publishers Publishers { get; set; }
// other properties
}
public class Publishers
{
// properties go here
}
我创建了与OpenLibrary返回的内容相同的C#对象。但是,如果查看响应,您会注意到它是一个JSON,根元素有一个奇怪的键:ISBN:
,后跟传入的ISBN号。Json不知道如何将这个动态键映射到我的OLResult
对象
我创建了一个简单的转换器,用于手动将此JSON转换为正确的对象:
public class OpenLibraryResultConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
OLResult result = new OLResult();
// Perform magic to copy JSON results to result object.
return result;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
我还向我的OLResult
类添加了一个属性[JsonConverter(typeof(OpenLibraryResultConverter))]
。当我调用JsonConvert.DeserializeObject(jsonStringResult)时
,并使用调试器检查ReadJson方法,我似乎找不到传入转换器的jsonStringResult
参数的JSON数据。传递到ReadJson
方法的参数的大多数属性显示为null或空
我的问题:如何在我的新JsonConverter中成功读取JSON字符串?如果您不需要动态属性号:
ISBN:XXXXXX
您可以使用一些简单的方法,比如使用部分JSON序列化,您可以签出它。这篇文章中不清楚,但第一部分实际上是一个标签,所以整体结构是这样的:
{
"ISBN:9780596005405": {...}
}
请注意,标签包含冒号,这使得直接转换为C#对象更加困难。
但不管怎样,您都需要为此定义一个对象类并对其进行解析,或者按照@Ernestas的建议,跳过它。您没有发布JSON。不要强迫人们从某个链接复制一大块文本并格式化它,只是为了理解你在问什么或者为什么你必须创建一个转换器,好的观点。我会更新这篇文章。对你的根对象使用
字典,如中所示,或者事实上我认为这是重复的,同意吗?如果反序列化到字典,我甚至不认为需要转换器。@dbc,完全是一个副本。即使标题不匹配,这也是一本字典。让我帮你标记一下。如果你不想挥动锤子。如果他们同意,就让社区投票。@yesman,欺骗不是坏事,我们只是把每个箭头指向更大的正确解决方案。但是顺便说一句,当你要一个Json样本时,你真的超过了一个无效的Json,。把人扔到路上。让我帮你把它修好,足够满足我的需要了,谢谢!
{
"ISBN:9780596005405": {...}
}