C# C语言中的字典数据序列化#
我想将字典数据转换成XML。我正在尝试使用XML序列化,但遇到了一个错误。下面是我的代码C# C语言中的字典数据序列化#,c#,generics,dictionary,serialization,C#,Generics,Dictionary,Serialization,我想将字典数据转换成XML。我正在尝试使用XML序列化,但遇到了一个错误。下面是我的代码 class Program { static void Main(string[] args) { Dictionary<int, AddressDetails> objDic = new Dictionary<int, AddressDetails>(); for (int i = 1; i <= 5; i++)
class Program
{
static void Main(string[] args)
{
Dictionary<int, AddressDetails> objDic = new Dictionary<int, AddressDetails>();
for (int i = 1; i <= 5; i++)
{
AddressDetails obj = new AddressDetails();
obj.HouseNo = i;
obj.StreetName = "New Street One " + i;
obj.City = "New Delhi One " + i;
objDic.Add(i, obj);
}
string str = Utility.GetXMLFromObject(objDic);
}
}
public class AddressDetails
{
public int HouseNo { get; set; }
public string StreetName { get; set; }
public string City { get; set; }
private string PoAddress { get; set; }
}
public static class Utility
{
public static string GetXMLFromObject(object o)
{
StringWriter sw = new StringWriter();
XmlTextWriter tw = null;
try
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
tw = new XmlTextWriter(sw);
serializer.Serialize(tw, o);
}
catch (Exception ex)
{
//Handle Exception Code
}
finally
{
sw.Close();
if (tw != null)
{
tw.Close();
}
}
return sw.ToString();
}
}
类程序
{
静态void Main(字符串[]参数)
{
字典objDic=新字典();
对于(int i=1;i请尝试下面链接中解释的解决方案:
您必须使用DataContract
序列化而不是XmlSerialization
,或者使用自定义字典类型。使用以下字典扩展名
[XmlRoot("Dictionary")]
public class DictionaryEx<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
XDocument document = null;
using (XmlReader subtreeReader = reader.ReadSubtree())
{
document = XDocument.Load(subtreeReader);
}
if (document == null)
return;
XmlSerializer serializer = new XmlSerializer(typeof(KeyValuePairEx<TKey, TValue>));
foreach (XElement element in document.Descendants(XName.Get("Item")))
{
using (XmlReader xmlReader = element.CreateReader())
{
var pair = serializer.Deserialize(xmlReader) as KeyValuePairEx<TKey, TValue>;
this.Add(pair.Key, pair.Value);
}
}
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer)
{
XmlSerializer serializer = new XmlSerializer(typeof(KeyValuePairEx<TKey, TValue>));
XmlSerializerNamespaces xmlNameSpaces = new XmlSerializerNamespaces();
xmlNameSpaces.Add(string.Empty, string.Empty);
foreach (TKey key in this.Keys)
{
TValue value = this[key];
var pair = new KeyValuePairEx<TKey, TValue>(key, value);
serializer.Serialize(writer, pair, xmlNameSpaces);
}
}
[XmlRoot("Item")]
public class KeyValuePairEx<TKey, TValue>
{
[XmlAttribute("Key")]
public TKey Key;
[XmlAttribute("Value")]
public TValue Value;
public KeyValuePairEx()
{
}
public KeyValuePairEx(TKey key, TValue value)
{
Key = key;
Value = value;
}
}
}
[XmlRoot(“字典”)]
公共类字典YEX:字典,IXmlSerializable
{
公共XmlSchema GetSchema()
{
返回null;
}
公共void ReadXml(XmlReader)
{
XDocument document=null;
使用(XmlReader subtreeer=reader.ReadSubtree())
{
document=XDocument.Load(子阅读器);
}
if(document==null)
回来
XmlSerializer serializer=新的XmlSerializer(typeof(KeyValuePairEx));
foreach(document.substands(XName.Get(“Item”)中的XElement元素)
{
使用(XmlReader=element.CreateReader())
{
var pair=序列化程序。反序列化(xmlReader)为KeyValuePairEx;
this.Add(pair.Key,pair.Value);
}
}
reader.ReadEndElement();
}
public void WriteXml(XmlWriter)
{
XmlSerializer serializer=新的XmlSerializer(typeof(KeyValuePairEx));
XmlSerializerNamespaces xmlNameSpaces=新的XmlSerializerNamespaces();
添加(string.Empty,string.Empty);
foreach(此.Keys中的TKey键)
{
t值=此[键];
var对=新的KeyValuePairEx(键,值);
serializer.Serialize(writer、pair、xmlnamespace);
}
}
[XmlRoot(“项目”)]
公共类KeyValuePairEx
{
[XmlAttribute(“键”)]
公钥;
[XmlAttribute(“值”)]
公共价值;
公钥值pairex()
{
}
公钥值pairex(TKey键,TValue值)
{
钥匙=钥匙;
价值=价值;
}
}
}
上述代码来自无法序列化的词典。请查看以下内容: