2013-11-21 66 views
3

我有JSON字符串:爲什麼使用JsonConvert.DeserializeAnonymousType這個匿名類型不能反序列化?

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

然後,我有以下代碼反序列化,但它返回空值:

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

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

deserializedToken是空

這裏是一個更詳細的例子,我不能去工作:

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

回答

7

有兩個問題在這裏,只要我可以告訴:

  • 你沒有response屬性反序列化
  • 的「令牌:123 ID:191」部分實際上只是一個字符串 - 中

    var def = new 
    { 
        response = new { token = "" } 
    }; 
    
    var deserializedToken = JsonConvert.DeserializeAnonymousType(json, def); 
    Console.WriteLine(deserializedToken); 
    

    ,那麼你就結了:外token財產

所以,如果你改變你的代碼的價值

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

如果要反序列化令牌/ ID部分,以及,你可以做到這一點:

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

那然後打印:

{ token = 123, id = 191 } 
+0

好了,這樣解釋了內在化問題我一直都有。如果可以找到匹配的話,我已經看到反序列化器跳過*屬性。也許更好地說,我已經看到它反序列化成比根低的對象。如果我有更多的選票,那麼你有我的一天;但這對你來說可能並不重要。我敢肯定,你在一小時內沒有投票權。 :D –

+0

我把它用於你的例子,但是我更詳細地說明了我無法工作。 – xaisoft

+1

@xaisoft:那麼JSON是什麼呢?說實話,我認爲這可能值得作爲一個新問題提出,只是爲了讓一切更清楚。 –

相關問題