Why does this anonymous type not deserialize properly using JsonConvert.DeserializeAnonymousType?

14,798

Solution 1

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 }

Solution 2

string jsonToken = @"{'response':{'token':{'token':'123','id':191}}}";
var def = new
{
    response = new
    {
        token = new { token = string.Empty, id = 0 }
    }
};

var deserializedToken = JsonConvert.DeserializeAnonymousType(jsonToken, def);
Share:
14,798
xaisoft
Author by

xaisoft

It's just a game.

Updated on June 18, 2022

Comments

  • xaisoft
    xaisoft almost 2 years

    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);