这里说的是字典的键值是自定义类的情况,其他情况不在讨论范围,所使用的Newtonsoft.Json.dll会在结尾给出下载地址。
闲话少说,直接上代码。
using System; using System.Collections.Generic; namespace Test { class KeyClass { public int value; public KeyClass(int value) { this.value = value; } public static explicit operator KeyClass(string jsonString) { return Newtonsoft.Json.JsonConvert.DeserializeObject<KeyClass>(jsonString); } public override string ToString() { return Newtonsoft.Json.JsonConvert.SerializeObject(this); } } class Program { static void Main(string[] args) { TestDictionaryJson(); } static public void TestDictionaryJson() { Dictionary<KeyClass, List<KeyClass>> dic = new Dictionary<KeyClass, List<KeyClass>>(); KeyClass key1 = new KeyClass(1); List<KeyClass> value1 = new List<KeyClass>(); value1.AddRange(new KeyClass[] { new KeyClass(111), new KeyClass(112), new KeyClass(113) }); KeyClass key2 = new KeyClass(2); List<KeyClass> value2 = new List<KeyClass>(); value2.AddRange(new KeyClass[] { new KeyClass(211), new KeyClass(212), new KeyClass(213) }); dic.Add(key1, value1); dic.Add(key2, value2); string str = Newtonsoft.Json.JsonConvert.SerializeObject(dic); var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<KeyClass, List<KeyClass>>>(str); } } }
其中重要的是:
public static explicit operator KeyClass(string jsonString) { return Newtonsoft.Json.JsonConvert.DeserializeObject<KeyClass>(jsonString); } public override string ToString() { return Newtonsoft.Json.JsonConvert.SerializeObject(this); }
说明:Newtonsoft.Json.dll中有许多东西,但本人对它并不熟悉;到目前为止,针对此文所讨论的情况,使用它的普通序列化和反序列化是有问题的,但并不排除通过其他的用法是完全可以胜任的;以上是我总结出的一套方法,欢迎各位看官指点其他更为有效的方法。
dll下载地址:https://github.com/JamesNK/Newtonsoft.Json