.Net设置文件,复杂类型和序列化

时间:2010-08-27 10:05:24

标签: visual-studio-2008 xml-serialization settings.settings

我有以下类型

[Serializable, XmlType(Namespace="http://mycompany/foo"]
public sealed class Limit
{
    [XmlElement(ElementName="Value1")]
    public double Value1 {get;set;}

    [XmlElement(ElementName="ComplexValue1")]
    public ComplexValue ComplexValue1 {get;set;}
}

[Serializable, XmlType(Namespace="http://mycompany/foo"]
public sealed class ComplexValue 
{
    [XmlElement(ElementName="Item1")]
    public double Item1 {get;set;}

    [XmlElement(ElementName="Item2")]
    public double Item2 {get;set;}
}

我想序列化为.settings文件。

当我将下面的blob复制到设置文件中时,我会以某种方式丢失ComplexValue1元素:

<?xml version="1.0" encoding="utf-16"?>
<Limit>
  <Value1>20</Value1>
  <ComplexValue1>
     <Item1>2.0</Item1>
     <Item2>5.0</Item2>
  </ComplexValue1>
</Limit>

即。 Visual Studio将其转换为:

<?xml version="1.0" encoding="utf-16"?>
<Limit>
<Value1>20</Value1>
</Limit>

有一堆名称空间,我觉得这个问题无关紧要......

我错过了什么?

2 个答案:

答案 0 :(得分:2)

  1. 您不需要XML序列化的Serializable属性

  2. 我想你应该删除XmlType属性来解决问题。

  3. 您指定了一个命名空间,但XML文件中没有?这也应该适合。

  4. 如果您愿意,可以使用XmlRoot作为根节点

答案 1 :(得分:0)

可以在设置设计器中的每个设置基础上关闭生成默认值的代码。只需在属性窗口中将GenerateDefaultValueInCode设置为false,即可获取那些不需要它的设置。