2011-03-09 61 views
1

我知道有關於此的無數問題。我讀過其中很多,但很少理解。你能幫助澄清在WP7中反序列化JSON的過程嗎?用Json.NET反序列化Windows Phone 7中的JSON

我有JSON,看起來像這樣:

{ 
    "status" : { 
     "code" : 99 , 
     "message" : "Already checked in" 
    }, 

    "response" : { 
     "token" : "faisdufhdaisuflasdkf", 
     "distance" : 20, 
     "angle" : 45 
    } 
} 

我想使用Json.NET,但是這是我的理解是非常化爲烏有。

var deserializedJSON = JsonConvert.DeserializeObject<Dictionary<string, <TYPE> >>(JsonString); 

對於<TYPE>,我該如何最好地定義預期的反序列化對象?狀態和響應作爲單獨的類?或者只是一個通用的全封裝ServerResponse類?

另外,我怎麼知道這個串行器將正確的輸出分配給正確的類成員變量?如果我有

class Status { 
    string code; 
    string message; 
} 

我如何知道這些將被正確分配?

謝謝。道歉,如果這似乎微不足道。這是我在C#,Silverlight的,Windows Phone 7的第一個項目,和/或.NET

回答

3
{ 
    "status" : { 
     "code" : 99 , 
     "message" : "Already checked in" 
    }, 

    "response" : { 
     "token" : "faisdufhdaisuflasdkf", 
     "distance" : 20, 
     "angle" : 45 
    } 
} 

轉化爲

public class item { 
    public status status { get; set; } 
    public response response { get; set; } 
} 
public class status { 
    public int code { get; set; } 
    public string message { get; set; } 
} 
public class response { 
    public string token { get; set; } 
    public int distance { get; set; } 
    public int angle { get; set; } 
} 

但在這種情況下,項目是匿名的(這是仍然有效)

,然後用它是這樣的:

var deserializedJSON = JsonConvert.DeserializeObject<item>(JsonString); 
+0

所以調用這個函數會自動將每個類和成員與相應的鍵:值對相關聯? – 2011-03-09 03:57:13

+0

@brian調用這個函數會正確地將json對象反序列化爲一個c#對象,是的。你說的另一件事是不正確的。我沒有在這裏保留一個關鍵值對。如果你需要返回一個KVP列表,那麼你可能需要別的東西。 – jcolebrand 2011-03-09 04:00:42

+0

我不需要返回KVP,我只是指的是JSON字符串中的特定KVP。請原諒我的新手術語:)非常感謝。 – 2011-03-09 04:09:36

1

你周圍的狀態ANAD響應的包裝,所以你需要ŧ帽子包裝類以某種方式表示,如果你想採取簡單的路徑。如果你不想自動反序列化,你可以控制並避免包裝,但我不明白爲什麼這將是你想要做的更好的選擇。換句話說,我確認了Drachenstern的答案,我也投了贊成票。 :-)

+0

感謝您的支持。 :由〜by〜,你會如何命名這個匿名包裝器?我很確定任何名字都可以做,但我傾向於將我的作品作爲複雜的對象寄回,所以這對我來說似乎有點可疑。 – jcolebrand 2011-03-09 04:21:45