Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用C将JSON反序列化为对象#_C#_Json_Json.net - Fatal编程技术网

C# 无法使用C将JSON反序列化为对象#

C# 无法使用C将JSON反序列化为对象#,c#,json,json.net,C#,Json,Json.net,我整个上午都在讨论这个问题,我不知道我在这里做错了什么 下面是我正在使用的XML { "item1": "{\"id\":\"53553621-da48-47dd-bad6-6e9d2b3c785f\",\"auth_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJDT0VMS0VSQFBPVU5EU0xBQlMuQ09NIiwianRpIjoiZjBlMjI3OTYtMTY4NC00MmRlLWE0ZDYtZDhiYm

我整个上午都在讨论这个问题,我不知道我在这里做错了什么

下面是我正在使用的XML

{
    "item1": "{\"id\":\"53553621-da48-47dd-bad6-6e9d2b3c785f\",\"auth_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJDT0VMS0VSQFBPVU5EU0xBQlMuQ09NIiwianRpIjoiZjBlMjI3OTYtMTY4NC00MmRlLWE0ZDYtZDhiYmVlZmRmNmQ2IiwiaWF0IjoxNTg0NTU4ODg5LCJyb2wiOiJhcGlfYWNjZXNzIiwiaWQiOiI1MzU1MzYyMS1kYTQ4LTQ3ZGQtYmFkNi02ZTlkMmIzYzc4NWYiLCJuYmYiOjE1ODQ1NTg4ODgsImV4cCI6MTU4NDU2NjA4OCwiaXNzIjoid2ViQXBpIiwiYXVkIjoiYXBpLm1pbGxtYW5tdWx0aW1lZGlhLmNvbTo0MDQwIn0.dthKzyJRqtkanYNRWEkiqYf4yzQT_A9Qn-GkH5eNAwM\",\"expires_in\":7200}",
    "item2": "105"
}
item1是一个标准的auth令牌,我需要拉取并传递它来进行API调用,我主要需要那个auth_令牌。 item2是要返回的自定义字段。 出于某种原因,每当我试图将这个JSON反序列化到我的对象中时,它就会出错

public class AuthToken
{
    public string id { get; set; }
    public string auth_token { get; set; }
    public int expires_in { get; set; }
}

public class Token
{
    public AuthToken item1 { get; set; }
    public string item2 { get; set; }
}
下面是我正在反序列化的代码

var t = JsonConvert.DeserializeObject<Token>(token,
                        new JsonSerializerSettings
                        {
                            NullValueHandling = NullValueHandling.Ignore
                        });

你知道我做错了什么吗?

问题是
AuthToken
不是字符串

您的令牌存储为字符串文字数据

编辑生成authtoken字符串的源代码(然后将其转换为authtoken),或使序列化程序序列化authtoken数据结构

public class AuthToken
{
    public string id { get; set; }
    public string auth_token { get; set; }
    public int expires_in { get; set; }
}

public class Token
{
    public string item1{get; set;}
    private AuthToken _token;

    public AuthToken AuthToken{ get { return _token ?? _token= new AuthToken(item1);}}
    public string item2 { get; set; }
}
您必须创建
AuthToken
ctor


或者您可以创建一个
JsonConverter
,它可以生成您想要的内容。

问题在于
AuthToken
不是字符串

您的令牌存储为字符串文字数据

编辑生成authtoken字符串的源代码(然后将其转换为authtoken),或使序列化程序序列化authtoken数据结构

public class AuthToken
{
    public string id { get; set; }
    public string auth_token { get; set; }
    public int expires_in { get; set; }
}

public class Token
{
    public string item1{get; set;}
    private AuthToken _token;

    public AuthToken AuthToken{ get { return _token ?? _token= new AuthToken(item1);}}
    public string item2 { get; set; }
}
您必须创建
AuthToken
ctor


或者你可以创建一个
JsonConverter
,它可以生成你想要的东西。

你能试试这个吗?JSON.NET:我会挑剔的。“从通常存储的数据构造对象”的操作称为反序列化,而serialize正好相反。您的项是转义字符串,因此反序列化程序会认为它只是一个字符串值。您可以尝试一下吗?JSON.NET:我会挑剔的。“从通常存储的数据构造对象”的操作称为反序列化,serialize正好相反。您的项是转义字符串,因此反序列化程序会认为它只是一个字符串值。