有一个空Dictionary<int, string>,怎样从XML填充键和值,就像下面这样?
<items>
<item id='int_goes_here' value='string_goes_here'/>
</items>
并在不使用XElement的情况下将其序列化回XML?
原文:How to serialize/deserialize to "Dictionary<int, string>" from custom XML not using XElement?
有一个空Dictionary<int, string>,怎样从XML填充键和值,就像下面这样?
<items>
<item id='int_goes_here' value='string_goes_here'/>
</items>
并在不使用XElement的情况下将其序列化回XML?
原文:How to serialize/deserialize to "Dictionary<int, string>" from custom XML not using XElement?
来自@L.B 的答案:
使用临时的item类
示例Dictionary:
序列化
反序列化
这个是使用XElement实现的方法,如果你改变主意的话。
序列化
反序列化
来自@Scott Chamberlain 的答案:
Paul Welter的 ASP.NET blog有个序列化的dictionary。但是它不使用属性,。我将解释为什么使用如下的代码。
首先,此代码里有个缺陷,假设你从另一个资源里读到了这样一个dictionary
这将在反序列化时抛出一个异常,因为一个dictionary只能有一个key。
你必须在序列化dictionary使用XElement的原因是:dictionary不是定义为Dictionary<String,String>,而是Dictionary<TKey,TValue>。
为了找出问题,问问你自己:假设我有一个TValue ,使用自我描述为XML的Elements序列化成某个东西,你怎样定义唯一版本的属性,代表完全的内部属性?
来自@manuFS 的回答:
Dictionary在C#里不是默认序列化的,我不知道为什么,但这好像是一个设计的选择。
现在,我建议使用Json.NET转换成JSON,从那里到dictionary(反之亦然)。除非你真的需要XML,不然我见你完全使用JSON。
来自@erikH 的回答:
写一个class A,包含class B阵列,Class B应该有个ID属性和值属性。将XML反序列化成class A,在A中将阵列转换为你想要的dictionary。
为了序列化dictionary,将其转换为class A的实例,然后再序列化。
来自@Gregor Primar 的回答: