2010-09-03 213 views
2

我有一些我想要序列化成類的XML。屬性的XML序列化

<MasterData> 
    <Data> 
    <SomeInnerData> 
     some inner data 
    </SomeInnerData> 
    </Data> 
</MasterData> 
<MoreData> 
    <SubMoreData>moredate</SubMoreData> 
</MoreDate> 

[System.SerializableAttribute()] 
public class MasterData 
{  
    public string SomeInnnerData {get;set;} 
    public string SubMoreDate {get;set;} 
} 

如何設置字符串成員變量序列化的XML適當的數據?我的問題出現在該元素不是MasterData元素的子元素。

+0

如果您不想創建支持默認序列化所需的所有類,那麼您最好實施'IXmlSerializable'。然後你可以讓你的類和它的xml表示儘可能不同。無論哪種方式,您**需要**來創建有效的xml,您目前沒有 – CaffGeek 2010-09-03 16:39:17

回答

0

您提供的XML示例不是有效的XML,因此您將無法直接對其進行序列化。你需要一個根節點來工作。

這樣的:

<AllData> 
    <MasterData> 
     <Data> 
      <SomeInnerData> 
        some inner data 
      </SomeInnerData> 
     </Data> 
    </MasterData> 
     <MoreData> 
      <SubMoreData>moredate</SubMoreData> 
    </MoreDate> 
<AllData> 

[System.SerializableAttribute()] 
public class AllData 
{ 
public MasterData MasterData {get;set;} 
public MoreData MoreData {get;set;} 
} 

[System.SerializableAttribute()] 
public class Data 
{ 
    public string SomeInnnerData {get;set;} 
} 

[System.SerializableAttribute()] 
public class MasterData 
{ 
    public string SomeInnnerData {get;set;} 
} 

[System.SerializableAttribute()] 
public class MasterData 
{ 
    public Data Data {get;set;} 
} 

[System.SerializableAttribute()] 
public class MoreData 
{ 
    public string SubMoreDate {get;set;} 
} 
+0

是否有可能在MasterData中有MoreDate並以某種方式告訴MasterData類該節點位於@ // RealMasterData/SubMoreData / – thenth 2010-09-03 16:18:31

0

對於普通的.NET XMLSerializer類,默認情況下公共屬性是序列化的。你必須明確地屬性的屬性被序列化:

[System.Xml.Serialization.XmlIgnoreAttribute] 

這裏的文檔:XmlSerializer

...

現在你已經修訂了您的問題,答案就是你將不再能夠使用XMLSerializer類。 (或者您必須有一些與您的XML結構匹配的中間類,以方便序列化和反序列化。)如果您有任意變換的特定XML結構,請使用XmlReader

2

最簡單的方法是逆向操作,讓你的類設置序列化到你想要的格式,這樣就可以反序列化到它輕鬆。

注意:你的XML未得到驗證,所以我把它改成這個爲例

<MasterData> 
    <Data> 
     <SomeInnerData>some inner data</SomeInnerData> 
    </Data> 
    <MoreData> 
     <SubMoreData>moredate</SubMoreData> 
    </MoreDate> 
</MasterData> 

目前,你的問題是,你有DataMoreData元素不映射到任何

你需要像

public class MasterData { 
    public Data Data {get; set;} 
    public MoreData Data {get; set;} 
} 

public class Data { 
    public string SomeInnerData {get; set;} 
} 

public class MoreData { 
    public string SubMoreData {get; set;} 
} 

你可以有你的屬性命名其他的東西創建類,並使用[XmlElement(ElementName="SubMoreData")]將屬性映射到正確的元素。

或者,你可以實現IXmlSerializable接口,並且在一個類編寫自定義序列化代碼映射類爲xml,但是你想

0

實現IXmlSerializable的用於自定義序列

0

如何使用XSL轉換從/到C#類直接序列化到的XML格式?