为什么这个匿名类型不反序列化正确使用JsonConvert.DeserializeAnonymousType? [英] Why does this anonymous type not deserialize properly using JsonConvert.DeserializeAnonymousType?

查看:2000
本文介绍了为什么这个匿名类型不反序列化正确使用JsonConvert.DeserializeAnonymousType?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的JSON字符串:

  {响应:{令牌:{\标记\:\123 \,\ID \:191}}}
 

然后,我有以下的code反序列化,但它返回空值:

  VAR高清=新
       {
           令牌=新{记号=的String.Empty,ID =的String.Empty}
        };

  VAR deserializedToken = JsonConvert.DeserializeAnonymousType(令牌,DEF);
 

deserializedToken 为null

下面是一个更详细的例子,我不能去工作:

  VAR高清=新
            {
                code =的String.Empty,
                消息=的String.Empty,
                URL =的String.Empty,
                令牌=新{记号=的String.Empty}
            };

            VAR响应= JsonConvert.DeserializeAnonymousType(数据,DEF);

            VAR innerDef =新{记号=的String.Empty,ID =的String.Empty};

            VAR deserializedInner = JsonConvert.DeserializeAnonymousType(response.token.token,innerDef);
 

解决方案

有两个问题在这里,因为据我可以告诉:

  • 您没有响应属性,反序列化
  • 的令牌:123编号:191部分实际上只是一个字符串 - 的价值外标记属性

所以,如果你改变了code到:

  VAR高清=新
{
    响应=新{记号=}
};

VAR deserializedToken = JsonConvert.DeserializeAnonymousType(JSON,DEF);
Console.WriteLine(deserializedToken);
 

,那么你就可以结束:

  {响应= {记号= {令牌:123,ID:191}}}
 

如果你想反序列化令牌/ ID的一部分,以及,你可以做到这一点:

  VAR innerDef =新{记号=,ID =};
VAR deserializedInner = JsonConvert.DeserializeAnonymousType
    (deserializedToken.response.token,innerDef);
Console.WriteLine(deserializedInner);
 

这则打印:

  {记号= 123,n = 191}
 

I have the JSON string:

{"response":{"token":"{\"token\":\"123\",\"id\":191}"}}

And then I have the following code to Deserialize it, but it is returning null:

 var def = new
       {
           token = new { token = string.Empty, id= string.Empty }
        };

  var deserializedToken = JsonConvert.DeserializeAnonymousType(token, def);

deserializedToken is null

Here is a more detailed example that I can't get to work:

var def = new
            {
                code = string.Empty,
                message = string.Empty,
                url= string.Empty,
                token = new {token = string.Empty}
            };

            var response = JsonConvert.DeserializeAnonymousType(data, def);

            var innerDef = new { token= string.Empty, id= string.Empty };

            var deserializedInner = JsonConvert.DeserializeAnonymousType(response.token.token, innerDef);

解决方案

There are two problems here, as far as I can tell:

  • You don't have a response property to deserialize
  • The "token:123 id:191" part is actually just a string - the value of the outer token property

So if you change your code to:

var def = new
{
    response = new { token = "" }
};

var deserializedToken = JsonConvert.DeserializeAnonymousType(json, def);
Console.WriteLine(deserializedToken);

then you'll end up with:

{ response = { token = {"token":"123","id":191} } }

If you want to deserialize the token/id part as well, you can do that with:

var innerDef = new { token = "", id = "" };
var deserializedInner = JsonConvert.DeserializeAnonymousType
    (deserializedToken.response.token, innerDef);
Console.WriteLine(deserializedInner);

That then prints:

{ token = 123, id = 191 }

这篇关于为什么这个匿名类型不反序列化正确使用JsonConvert.DeserializeAnonymousType?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆