这里说的是字典的键值是自定义类的情况,其他情况不在讨论范围,所使用的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
本文出自 “KeepMoving” 博客,请务必保留此出处http://maqqme.blog.51cto.com/9277946/1730149
原文地址:http://maqqme.blog.51cto.com/9277946/1730149