XmlSerializer反序列化空元素的属性
问题描述:
我的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
财产(似乎对我来说矫枉过正)?
答
据我所知,你必须创建一个单独的类。该属性名为“ProblemHere”,但您希望该属性被命名为“value” - 我不知道.Net中的任何属性都可以执行此操作。
我通常更喜欢让Visual Studio生成一个基本的XSD(我可以稍后调整),然后使用xsd.exe为它生成一组(de)序列化类。
答
你可以做这样的事情
private int _problem = 0;
public int ProblemHere { get {return _problem; } set { _problem = value; } }
不漂亮,但工作
+1
这不会做任何有用的事情;它只是用手动实现的属性替换自动实现的属性; 'XmlSerializer'将对其进行相同的处理。 – 2014-10-06 13:28:33
答
是的,你必须创建一个类来表示数据的ASPEC,即
public class Foo {
[XmlAttribute]
public int Value {get;set;}
}
public Foo ProblemHere { get; set; }
那是唯一的方式XmlSerializer
将与你想要的结构一起工作。
您的其他选择是手动进行序列化。 – juharr 2014-10-06 13:25:21