4

我有 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\"}
4

3 回答 3

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

http://json2csharp.com/

于 2015-11-10T14:50:40.647 回答
1

看起来您在 JSON 字符串中的整个对象周围有一组额外的花括号“{}”。您是否尝试过删除它们以查看它是否有效?

我将您的 JSON 字符串粘贴到一些基于 Web 的JSON 格式化程序中,它们都抛出错误,直到我删除了最外面的花括号。

于 2015-11-10T14:25:44.167 回答
1

一种方法是Linq-to-JSONJson.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结构不正确,您{}在对象周围有一组额外的大括号。

于 2015-11-10T14:30:27.133 回答