我正在使用Newtonsoft.Json来反序列化我的JSON。下面是我的JSON字符串。
{
"data": {
"type": "records",
"id": "7",
"attributes": {
"created": "2017-01-19T08:42:56Z",
"updated": "2017-01-19T08:42:56Z",
"state": 3,
"data": {
"Lastname": [
"Gonzales"
],
"Firstname": [
"Lacy"
],
"Email": [
"ludam@gmail.com"
],
"Salutation": [
"Mrs."
]
}
}
}
}
所以当我创建一个这样的动态变量,并把名字赋给字符串s时,我会得到一个RuntimebinderException。
dynamic data = JsonConvert.DeserializeObject(responseString2);
string s = data.attributes.data.Firstname;
我是不是忘了什么?
3条答案
按热度按时间gwbalxhn1#
从JSON结构来看,
Firstname
实际上是一个包含单个项目的数组。此外,由于JSON包含一个名为
data
的根对象,因此您似乎也忽略了它(由于您也将变量命名为data
,因此可能会引起混淆)。我认为:
显然,如果您可以控制返回的JSON,您可以将其重构为更易于使用的内容:
此外,您可以使用原始
JObject
访问数据,从而完全避免dynamic
:更多选项请参见LINQ to JSON
polhcujo2#
首先,您的JSON似乎不正确。
正确的Json:
名字是
List<string>
,而不是string
。因为Data2将被序列化为。
还有一个建议。
我认为如果Data2只属于一个persion,那么您必须更改json结构。
如果你把它反序列化到class.,那么
Data2
类就像这样。然后你可以做,你现在在做什么。
du7egjpx3#
如果有办法修改你的
json
,那么就去掉名字里面的[],然后你就可以访问这个值了。也可以像他回答中提到的@haim770那样不修改
json
就可以访问。