3 回答
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
TA贡献1805条经验 获得超9个赞
关于XML序列化的问题不仅在于创建字节流。它还与创建此字节流将针对其进行验证的XML模式有关。XML Schema中没有很好的方法来表示字典。您能做的最好的就是证明有一个唯一的钥匙。
您始终可以创建自己的包装器,例如“序列化词典的一种方法”。
![?](http://img1.sycdn.imooc.com/5333a2320001acdd02000200-100-100.jpg)
TA贡献1848条经验 获得超2个赞
我知道以前已经回答过这个问题,但是由于我有一个非常简洁的方法(代码)来使用DataContractSerializer类(由WCF使用,但可以并且应该在任何地方使用)进行IDictionary序列化,所以我不能拒绝在这里提供它:
public static class SerializationExtensions
{
public static string Serialize<T>(this T obj)
{
var serializer = new DataContractSerializer(obj.GetType());
using (var writer = new StringWriter())
using (var stm = new XmlTextWriter(writer))
{
serializer.WriteObject(stm, obj);
return writer.ToString();
}
}
public static T Deserialize<T>(this string serialized)
{
var serializer = new DataContractSerializer(typeof(T));
using (var reader = new StringReader(serialized))
using (var stm = new XmlTextReader(reader))
{
return (T)serializer.ReadObject(stm);
}
}
}
尽管我尚未对其进行测试,但它在.NET 4中可以完美地工作,并且在.NET 3.5中也可以工作。
更新:它不支持 .NET Compact Framework(甚至Windows Phone 7的NETCF 3.7也不适用)DataContractSerializer!
我将流式传输到字符串是因为它对我来说更方便,尽管我可以将较低级别的序列化引入Stream,然后用它来序列化为字符串,但是我倾向于只在需要时进行泛化(就像过早的优化是邪恶的一样) ,这是过早的概括...)
用法很简单:
// dictionary to serialize to string
Dictionary<string, object> myDict = new Dictionary<string, object>();
// add items to the dictionary...
myDict.Add(...);
// serialization is straight-forward
string serialized = myDict.Serialize();
...
// deserialization is just as simple
Dictionary<string, object> myDictCopy =
serialized.Deserialize<Dictionary<string,object>>();
myDictCopy将是myDict的逐字记录副本。
您还将注意到,提供的通用方法将能够序列化任何类型(据我所知),因为它不仅限于IDictionary接口,它实际上可以是任何通用类型T。
希望它可以帮助某个人!
- 3 回答
- 0 关注
- 400 浏览
添加回答
举报