XmlSerializer反序列化空元素的属性

时间:2014-10-06 13:20:20

标签: c# .net xml xml-serialization

我的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)。有没有简单的方法可以做到这一点,还是我必须创建一个ProblemHere属性int Value的类(对我来说似乎有点过分了)?

3 个答案:

答案 0 :(得分:1)

据我所知,你必须创建一个单独的类。该属性命名为&#34; ProblemHere&#34;,但您希望该属性命名为&#34; value&#34; - 我不知道.Net中的任何属性都可以做到这一点。

我通常更喜欢让visual studio生成一个基础XSD(我稍后可以调整),然后使用xsd.exe为它生成一组(de)序列化类。

答案 1 :(得分:1)

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

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

public Foo ProblemHere { get; set; }

这是XmlSerializer与您想要的结构一起使用的唯一方式。

答案 2 :(得分:0)

你可以做这样的事情

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

不漂亮,但有效