我有一個自定義.net類型的字典作爲其key.I嘗試使用JSON.net將此字典序列化爲JSON,但它無法將密鑰轉換爲序列化過程中的正確值。不能使用JSON.net序列化帶有複雜鍵的字典
class ListBaseClass
{
public String testA;
public String testB;
}
-----
var details = new Dictionary<ListBaseClass, string>();
details.Add(new ListBaseClass { testA = "Hello", testB = "World" }, "Normal");
var results = Newtonsoft.Json.JsonConvert.SerializeObject(details);
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<ListBaseClass, string>> results);
這給我 - > 「{\」 JSonSerialization.ListBaseClass \ 「:\」 正常\ 「}」
但是,如果我有我的自定義類型的字典值效果很好
var details = new Dictionary<string, ListBaseClass>();
details.Add("Normal", new ListBaseClass { testA = "Hello", testB = "World" });
var results = Newtonsoft.Json.JsonConvert.SerializeObject(details);
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, ListBaseClass>>(results);
這給我 - > 「{\」 正常\ 「:{\」 種皮\ 「:\」 你好\ 「\ 」TESTB \「:\ 」世界\「}}」
有人可以建議如果我碰到Json.net的某些限制或我做錯了什麼?
這對我們有效,解決複雜的字典鍵的問題。如果泛型類在類嵌套中使用了不同的具體實現,我們的自定義JsonConverter無法在複雜關鍵類上使用declarative屬性 - 我們不得不將它作爲參數傳遞給JsonConvert.SerializeObject,但不太理想。 – mungflesh
我也剛剛得到這個複雜的字典鍵類型的工作。注意別人 - 這是獨立於JSON.Net包中的JSONTypeConverter的東西。另外,還沒有需要用於此的JSON設置。這個答案確實確實包含你需要做的事情。我發現最初在重寫函數內部放置斷點,以更好地理解它們何時被使用以及它們被要求做什麼是有用的。 – DaveInCaz
很好的答案,即使它不適用於我,因爲我使用Windows Phone 8.1,其中System.ComponentModel.TypeConverter不受支持。 – user3141326