C# 用于反序列化动态对象的JSON.NET

C# 用于反序列化动态对象的JSON.NET,c#,json,json.net,azure-api-apps,C#,Json,Json.net,Azure Api Apps,我有JSON数据: var decodedJson = "{{ "user": { "userId": "sid:C4F4E93856104F078A11FE95892F0158" }, "authenticationToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmdWxscm93IjoiYWxsIiwiRGJnMiI6ImxvZ2luIiwidmVyIjoiMyIsInVpZCI6InNpZDpDNEY0RTkzODU2M

我有JSON数据:

var decodedJson =
"{{
  "user": {
    "userId": "sid:C4F4E93856104F078A11FE95892F0158"
  },
  "authenticationToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmdWxscm93IjoiYWxsIiwiRGJnMiI6ImxvZ2luIiwidmVyIjoiMyIsInVpZCI6InNpZDpDNEY0RTkzODU2MTA0RjA3OEExMUZFOTU4OTJGMDE1OCIsImlzcyI6InVybjptaWNyb3NvZnQ6d2luZG93cy1henVyZTp6dW1vIiwiYXVkIjoidXJuOm1pY3Jvc29mdDp3aW5kb3dzLWF6dXJlOnp1bW8iLCJleHAiOjE0NDk3NTYzNzIsIm5iZiI6MTQ0NzE2NDM3Mn0.kc-0O_aorfTw9l9U6yY6wyVtQnckqNBJikBzxAcJZ_U"
}}";
然后我想使用JSON.NET动态反序列化它:

var result = JsonConvert.DeserializeObject<dynamic>(decodedJson);
但它在说

“未知成员用户/身份验证令牌”

有什么想法吗


更新:

我复制了错误的json数据,实际上应该是这样的:

string userId = result.user.userId;
string userToken = result.authenticationToken;
{\"user\":{\"userId\":\"sid:C4F4E93856104F078A11FE95892F0158\"},\"authenticationToken\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmdWxscm93IjoiYWxsIiwiRGJnMiI6ImxvZ2luIiwidmVyIjoiMyIsInVpZCI6InNpZDpDNEY0RTkzODU2MTA0RjA3OEExMUZFOTU4OTJGMDE1OCIsImlzcyI6InVybjptaWNyb3NvZnQ6d2luZG93cy1henVyZTp6dW1vIiwiYXVkIjoidXJuOm1pY3Jvc29mdDp3aW5kb3dzLWF6dXJlOnp1bW8iLCJleHAiOjE0NDk3NjE1NDEsIm5iZiI6MTQ0NzE2OTU0MX0.oVH8R2134UQQDpXfzPv2mmrj7M05w2mzWtbp70i7GEU\"}

看起来在JSON字符串中的整个对象周围有一组额外的大括号“{}”。你有没有试过把它们去掉看看是否有效

我将您的JSON字符串粘贴到一些基于web的文件中,它们都会抛出错误,直到我删除了最外层的花括号。

一种方法是像这样使用
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"];
如果对象结构将来发生更改,则可以将新的
字符串
标记名作为参数传递给方法

注意
您的
JSON
结构不正确,您在对象周围有一组额外的大括号
{}

从长远来看,您最好准确地复制C#中的结构。如果您的模型更改为json,那么无论如何,您都必须更改
动态
代码,而且bug更容易潜入

在删除响应开头和结尾的额外
{}
之后,可以使用以下类来解析json

public class User
{
    public string userId { get; set; }
}

public class RootObject
{
    public User user { get; set; }
    public string authenticationToken { get; set; }
}
您可以利用以下站点快速将JSON映射到CSharp


既然您知道JSON结构,就不能序列化为标准类型吗?@ArghyaC:JSON数据将来可能会更改。无论如何,我遵循了Microsoft Azure API中的这个代码示例。您是否尝试删除开头的
{
和结尾的
}
,开始和结束时都有2个,这在JSON中是非法的。您也可以尝试这样做:抱歉,我复制了错误的json数据,只是将问题更新到OP中-如果您收到双括号,您可以使用以下命令删除它们:
jsonString=jsonString.Substring(1,jsonString.Length-2)
在某些情况下,使用json.Net解析有效的json时,出于某种原因会添加额外的花括号??这就是我一直坚持的。谢谢。我知道,但我只是按照Microsoft示例页面中的说明进行操作,我想知道它有什么问题: