2017-05-16 171 views
2

我试图反序列化使用Newtonsoft这样我就可以在列表框中显示从基于云的服务器文件的数组,但我总是最后收到此错误无论怎样我尝试:C#Newtonsoft反序列化JSON阵列

Newtonsoft.Json.JsonReaderException:'解析值时遇到意外的字符:[。路径'[0] .priv',第4行,位置15。

THISIS一个例子尝试反序列化:

[ 
{ 
    "code": 200, 
    "priv": [ 
    { 
     "file": "file.txt", 
     "ext": "txt", 
     "size": "104.86" 
    }, 
    { 
     "file": "file2.exe", 
     "ext": "exe", 
     "size": "173.74" 
    }, 

    ], 
    "pub": [ 
    { 
     "file": "file.txt", 
     "ext": "txt", 
     "size": "104.86" 
    }, 
    { 
     "file": "file2.exe", 
     "ext": "exe", 
     "size": "173.74" 
    } 
    ] 
} 
] 

我试图用C#类是这样的:

public class ListJson 
{ 
    [JsonProperty("pub")] 
    public List List { get; set; } 
} 

public class List 
{ 
    [JsonProperty("file")] 
    public string File { get; set; } 

    [JsonProperty("ext")] 
    public string Ext { get; set; } 

    [JsonProperty("size")] 
    public string Size { get; set; } 
} 
    [JsonProperty("priv")] 
public List List { get; set; } 
} 

public class List 
{ 
    [JsonProperty("file")] 
    public string File { get; set; } 

    [JsonProperty("ext")] 
    public string Ext { get; set; } 

    [JsonProperty("size")] 
    public string Size { get; set; } 
} 

并与反序列化:

List<list> fetch = Newtonsoft.Json.JsonConvert.DeserializeObject<List<list>>(json); 
+0

你用这个来验证你的[JSON](http://json.parser.online.fr/)*提示*它有一个语法错误 – t0mm13b

+0

这不是我的json我从服务器的API中获得它所以我没有办法做到这一点:/我会告诉网站 – Zeq

+2

的所有者,你有2个名为'List'的类?...? –

回答

4

正确的C#类结构的JSON如下:

public class FileEntry 
{ 
    public string file { get; set; } 
    public string ext { get; set; } 
    public string size { get; set; } 
} 

public class FileList 
{ 
    public int code { get; set; } 
    public List<FileEntry> priv { get; set; } 
    public List<FileEntry> pub { get; set; } 
} 

反序列化是这样:

var fetch = JsonConvert.DeserializeObject<FileList[]>(json); 
var fileList = fetch.First(); // here we have a single FileList object 

正如在其他的答案说,创建一个名为类List没有按”自动将它变成一个对象集合。您需要声明要从数组中收集类型的反序列化类型(例如List<T>T[]等)。

小提示:如有疑问,请使用json2csharp.com从json字符串中生成强类型类。

+0

非常感谢!它的工作 – Zeq

+0

现在我坚持实际使用反序列化的JSON:/我真的在这吸 – Zeq

+0

@Zeq卡在哪里?这里是一个小的[.NET小提琴演示](https://dotnetfiddle.net/ZEqKlT)。 –

0

目前List有一个List实例名为priv,尽管名称:并没有列入清单。要反序列化JSON数组("priv": [...]),它需要一个数组或类似列表的类型,例如List<T>对于某些T。假设List<FileThing>,如果我们假设FileThing实际上是第二种称为List(您有2)。

+0

我的课程被称为列表 – Zeq

+0

@Zeq他们不是**两个**调用'List'(至少:不在同一个名称空间中)...因为*这不是合法的C#* ...但是这不是这一点。问题不在于名称......而是它需要是一个数组或类似列表的类型。您可以将您的'List'类型重命名为'Banana',并且我所说的所有内容都将保持一致。 –