Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于处理动态密钥名称的JsonConverter_C#_Json.net - Fatal编程技术网

C# 用于处理动态密钥名称的JsonConverter

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#对象。但是,如果

我正在编写处理OpenLibrary响应的代码。这是一个rest服务,它根据传入的ISBN返回书籍。示例URL如下所示:

我有这些物品:

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": {...}
}