2014-10-06 72 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將與你想要的結構一起工作。

相關問題