【问题标题】:XmlSerializer deserialize attribute of empty elementsXmlSerializer 反序列化空元素的属性
【发布时间】:2014-10-06 13:20:19
【问题描述】:

我的 XmlSerializer 有问题。我尝试反序列化这个文件:

<MyClass Id="12">
    <ProblemHere Value="8"/>
    <OtherElement>0</OtherElement>
    <fdp>NTM</fdp>
</MyClass>

在这个类中:

[XmlType(TypeName = "MyClass")]
public class MyClass
{
    [XmlAttribute(AttributeName = "Id")]
    public int Id { get; set; }

    //Here I try somes head but it's a failure
    public int ProblemHere { get; set; }

    public int OtherElement{ get; set; }

    public string fdp{get; set}
}

您可能理解,我想要将ProblemHere 设置为其值(此处为8)。有什么简单的方法可以做到这一点,还是我必须创建一个带有int Value 属性的ProblemHere 类(对我来说似乎有点矫枉过正)?

【问题讨论】:

  • 您的另一个选择是手动进行序列化。

标签: c# .net xml xml-serialization


【解决方案1】:

据我所知,您必须创建一个单独的类。该属性名为“ProblemHere”,但您希望将该属性命名为“value”——我不知道.Net 中有任何属性可以做到这一点。

我通常更喜欢让 Visual Studio 生成一个基本 XSD(我可以稍后对其进行调整),然后使用 xsd.exe 为其生成一组(反)序列化类。

【讨论】:

    【解决方案2】:

    是的,您必须创建一个类来表示数据的该方面,即

    public class Foo {
        [XmlAttribute]
        public int Value {get;set;}
    }
    
    public Foo ProblemHere { get; set; }
    

    这是XmlSerializer 使用您想要的结构的唯一方法。

    【讨论】:

      【解决方案3】:

      你可以这样做

      private int _problem = 0;
      public int ProblemHere { get {return _problem; }  set { _problem = value; } }
      

      不漂亮,但很有效

      【讨论】:

      • 那不会有任何用处;只是用手动实现的属性替换自动实现的属性; XmlSerializer 将一视同仁。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多