C# 从json文件c中检索项

C# 从json文件c中检索项,c#,json,C#,Json,我想从json文件中检索最新版本1.1.0。然而,它总是给我错误的不能反序列化json对象到类型RootObject 这是我的班级 { "_id": "underscore", "_rev": "136-824a0ef7436f808755f0712c3acc825f", "name": "underscore", "description": "JavaScript's functional programming helper library.", "

我想从json文件中检索最新版本1.1.0。然而,它总是给我错误的不能反序列化json对象到类型RootObject

这是我的班级

{
    "_id": "underscore",
    "_rev": "136-824a0ef7436f808755f0712c3acc825f",
    "name": "underscore",
    "description": "JavaScript's functional programming helper library.",
    "dist-tags": {},
    "versions": {
        "1.0.3": {
            "name": "xxx",
            "description": "xxx"
        },
        "1.0.4": {},
        "1.1.0": {}
    }
}
这就是我使用它的地方

public class versions
{
    public string name { get; set; }
    public string description { get; set; }
}

public class RootObject
{
    public List<versions> vs { get; set; }
}
任何想法。多谢

更新:
我已经更新了JSON文件格式,但存在一些问题。

我认为问题在于,在JSON中,必须引用所有字段/属性名称。这与标准Javascript表示法不同,后者可以有不带引号的属性

因此,您的文件应该如下所示:

RootObject[] dataset = JsonConvert.DeserializeObject<RootObject[]>(json);

请注意,{1.0.3:{name:xxx}}也不是有效的JavaScript,因为“1.0.3”在JavaScript中是无效标识符。

我认为问题在于,在JSON中,必须引用所有字段/属性名称。这与标准Javascript表示法不同,后者可以有不带引号的属性

因此,您的文件应该如下所示:

RootObject[] dataset = JsonConvert.DeserializeObject<RootObject[]>(json);

请注意,{1.0.3:{name:xxx}}也不是有效的JavaScript,因为“1.0.3”在JavaScript中是无效的标识符。

我已经修复了您的json问题。现在是你真正的问题

我想从json文件中检索最新版本1.1.0。然而,它总是给我错误的不能反序列化json对象到类型RootObject

您有像1.0.3这样的属性名,这些名称在编译时是未知的。因此,不能将它们反序列化为具体的类。你应该动态地处理它们

试试这个:

{
  "_id" : "underscore",
  "versions": {
    "1.0.3" : {
       "name": "xxx",
       "description": "xxx"
    }
}

我已经修复了您的json问题。现在是你真正的问题

我想从json文件中检索最新版本1.1.0。然而,它总是给我错误的不能反序列化json对象到类型RootObject

您有像1.0.3这样的属性名,这些名称在编译时是未知的。因此,不能将它们反序列化为具体的类。你应该动态地处理它们

试试这个:

{
  "_id" : "underscore",
  "versions": {
    "1.0.3" : {
       "name": "xxx",
       "description": "xxx"
    }
}

查看更新答案中的JSON:

var versions = JObject.Parse(json)["versions"]
               .Children()
               .Cast<JProperty>()
               .ToDictionary(c => c.Name, c => c.Value.ToObject<versions>());
这仍然是无效的JSON-您有4个开始{和3个结束}


您应该使用-来验证您的JSON并确保其有效

查看更新答案中的JSON:

var versions = JObject.Parse(json)["versions"]
               .Children()
               .Cast<JProperty>()
               .ToDictionary(c => c.Name, c => c.Value.ToObject<versions>());
这仍然是无效的JSON-您有4个开始{和3个结束}


您应该使用-来验证JSON并确保其有效

Erorrs:无法从用法推断。。我认为字典和对象是错误的assume@user1851359我在发布前测试了它。没有错误。您是否包含System.Linq?Erorrs:无法从用法推断。。我认为字典和对象是错误的assume@user1851359我在发布前测试了它。没有错误。您是否包括System.Linq?更新后有哪些问题?更新后有哪些问题?