所以我正在通过这个例子来尝试第一次去des https://www.newtonsoft.com/json/help/html/DeserializeObject.htm 我试图从json数据中创建对象,然后获取相应的属性。
嗯..我说错了这个
Newtonsoft.Json.JsonSerializationException:'无法反序列化 当前的JSON数组(例如[1,2,3])成类型 ' json_deserializing.OppedAccounts'因为类型需要JSON 对象(例如{" name":" value"})正确反序列化。解决这个问题 错误要么将JSON更改为JSON对象(例如{" name":" value"}) 或将反序列化类型更改为数组或实现的类型 可以像List一样的集合接口(例如ICollection,IList) 从JSON数组反序列化。 JsonArrayAttribute也可以 添加到类型以强制它从JSON数组反序列化。路径 '',第1行,第1位。'
我是json&的新手反序列化所以我不确定这里发生了什么。 我的问题是,如何以propper方式反序列化json? 我读了一些关于列表和东西的东西,但我无法连接点。
[
{
"uuid": "98e99e7a-df48-4b8b-adc9-e65c32410247",
"name": "UsernameOne",
"level": 4,
"bypassesPlayerLimit": false
},
{
"uuid": "b87e1cbc-c67c-4026-a359-8652ad9de8b4",
"name": "UsernameTwo",
"level": 4,
"bypassesPlayerLimit": false
}
]
CSharp代码
public partial class MainWindow : Window
{
public string line = null;
public MainWindow()
{
InitializeComponent();
Deserialize();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(line != null)
{
OppedAccounts account = JsonConvert.DeserializeObject<OppedAccounts>(line);
Debug.Print(account.name);
}
}
private void Deserialize()
{
using (StreamReader sr = new StreamReader("ops.json"))
{
line = sr.ReadToEnd();
}
tbjson.AppendText(line);
}
}
和班级
class OppedAccounts
{
public string uuid { get; set; }
public string name { get; set; }
public int level { get; set; }
public bool bypassplayerlimit { get; set; }
}
答案 0 :(得分:5)
您正在反序列化数组,因此您希望返回一个对象数组。将account
的类型和JsonConvert.DeserializeObject
的通用参数更改为List<OppedAccounts>
。
List<OppedAccounts> accounts = JsonConvert.DeserializeObject<List<OppedAccounts>>(line);