【发布时间】:2014-09-03 20:32:34
【问题描述】:
我正在尝试使用 DataContractSerializer 反序列化 Dictionary<TKey,TValue>。我没有例外,我的字典回来了null。我已经阅读了多篇文章,尝试了多种实现,但仍然没有成功。我敢肯定,我错过了一些非常小的东西,并且真的可以用几双眼睛为我查看它,也许将它分开并告诉我我的问题出在哪里。任何帮助是极大的赞赏。我使用的类如下:
[DataContract]
public class Config
{
public Config()
{
SerializableDictionary = new SerializableDictionary<int, string>();
}
[DataMember]
public SerializableDictionary<int, string> SerializableDictionary { get; set; }
}
[CollectionDataContract(Name = "SerializableDictionary", ItemName = "DictionaryItem", KeyName = "Key", ValueName = "Value")]
public sealed class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
}
我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<Config xmlns="http://TestNameSpace" >
<SerializableDictionary >
<DictionaryItem>
<Key>1</Key>
<Value>one</Value>
</DictionaryItem>
<DictionaryItem>
<Key>2</Key>
<Value>two</Value>
</DictionaryItem>
<DictionaryItem>
<Key>3</Key>
<Value>three</Value>
</DictionaryItem>
<DictionaryItem>
<Key>4</Key>
<Value>four</Value>
</DictionaryItem>
<DictionaryItem>
<Key>5</Key>
<Value>five</Value>
</DictionaryItem>
<DictionaryItem>
<Key>6</Key>
<Value>six</Value>
</DictionaryItem>
</SerializableDictionary>
</Config>
调用方法:
private static void Main(string[] args)
{
Config config = null;
using (var stream = new FileStream(
Path.GetDirectoryName(
Assembly.GetExecutingAssembly()
.Location) + "\\Dictionary.xml", FileMode.Open))
using (var reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas()))
{
var serializer = new DataContractSerializer(typeof(Config), "Config", "http://TestNameSpace");
config = (Config)serializer.ReadObject(reader);
}
foreach (var obj in config.SerializableDictionary)
Console.WriteLine(obj.Value);
}
【问题讨论】:
标签: c# xml wcf dictionary datacontractserializer