我有JSON数据:
var decodedJson =
"{{
"user": {
"userId": "sid:C4F4E93856104F078A11FE95892F0158"
},
"authenticationToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmdWxscm93IjoiYWxsIiwiRGJnMiI6ImxvZ2luIiwidmVyIjoiMyIsInVpZCI6InNpZDpDNEY0RTkzODU2MTA0RjA3OEExMUZFOTU4OTJGMDE1OCIsImlzcyI6InVybjptaWNyb3NvZnQ6d2luZG93cy1henVyZTp6dW1vIiwiYXVkIjoidXJuOm1pY3Jvc29mdDp3aW5kb3dzLWF6dXJlOnp1bW8iLCJleHAiOjE0NDk3NTYzNzIsIm5iZiI6MTQ0NzE2NDM3Mn0.kc-0O_aorfTw9l9U6yY6wyVtQnckqNBJikBzxAcJZ_U"
}}";
然后我想使用JSON.NET动态反序列化它:
var result = JsonConvert.DeserializeObject<dynamic>(decodedJson);
然后我希望像这样提取UserId和Token:
string userId = result.user.userId;
string userToken = result.authenticationToken;
但它是在说
“未知的成员用户/ authenticationToken”
有什么想法吗?
更新:
我复制了错误的json数据,实际应该是这样的:
{\"user\":{\"userId\":\"sid:C4F4E93856104F078A11FE95892F0158\"},\"authenticationToken\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmdWxscm93IjoiYWxsIiwiRGJnMiI6ImxvZ2luIiwidmVyIjoiMyIsInVpZCI6InNpZDpDNEY0RTkzODU2MTA0RjA3OEExMUZFOTU4OTJGMDE1OCIsImlzcyI6InVybjptaWNyb3NvZnQ6d2luZG93cy1henVyZTp6dW1vIiwiYXVkIjoidXJuOm1pY3Jvc29mdDp3aW5kb3dzLWF6dXJlOnp1bW8iLCJleHAiOjE0NDk3NjE1NDEsIm5iZiI6MTQ0NzE2OTU0MX0.oVH8R2134UQQDpXfzPv2mmrj7M05w2mzWtbp70i7GEU\"}
答案 0 :(得分:2)
从长远来看,你最好完全复制C#中的结构。如果您的模型更改为json,则无论如何您都必须更改dynamic
代码,并且更容易陷入错误。
在响应开始和结束时删除额外的{}
后,可以使用以下类来解析json。
public class User
{
public string userId { get; set; }
}
public class RootObject
{
public User user { get; set; }
public string authenticationToken { get; set; }
}
您可以使用以下网站快速将JSON映射到CSharp
答案 1 :(得分:1)
看起来你有一套额外的花括号&#34; {}&#34;围绕JSON字符串中的整个对象。您是否尝试删除它们以确定它是否有效?
我将你的JSON字符串粘贴在一些基于网络的JSON formatters中,他们都丢错了,直到我删除了最外面的花括号。
答案 2 :(得分:1)
一种方法是使用Json.NET
这样的var jsonString = File.ReadAllText(@"C:\YourDirectory\user.json");
var jObjet = JObject.Parse(jsonString);
string userId = (string)jObjet["user"]["userId"];
string userToken = (string)jObjet["authenticationToken"];
string
如果您的对象结构将来发生变化,您可以将新的JSON
标记名称作为参数传递给您的方法。
注意强>
您的{}
结构不正确,您在对象周围有一组额外的大括号the_status <- c('2: approved (newer)',
'5: approved (extended)',
'3: denied (not appealed)',
'14: denied (not appealed/withdrawn)',
'20: approved',
'21: denied',
'24: not approved within 21 days',
'28: not approved in 21 days')
。