2014-10-06 39 views
1

我的XmlSerializer出现问题。我尝试反序列化这个文件: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财产(似乎对我来说矫枉过正)?

+0

您的其他选择是手动进行序列化。 – juharr 2014-10-06 13:25:21

回答

1

据我所知,你必须创建一个单独的类。该属性名为“ProblemHere”,但您希望该属性被命名为“value” - 我不知道.Net中的任何属性都可以执行此操作。

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

0

你可以做这样的事情

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

不漂亮,但工作

+1

这不会做任何有用的事情;它只是用手动实现的属性替换自动实现的属性; 'XmlSerializer'将对其进行相同的处理。 – 2014-10-06 13:28:33

1

是的,你必须创建一个类来表示数据的ASPEC,即

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

public Foo ProblemHere { get; set; } 

那是唯一的方式XmlSerializer将与你想要的结构一起工作。

相关问题