2011-12-22 84 views
2

我要生成在我的C#代碼以下XML輸出:移除命名空間標籤(的xmlns :)從XMLSerializer的

<?xml version="1.0" encoding="utf-16"?> 
<CallConnectReq Xmlns="urn:interno-com:ns:a9c" reqId="9" msgNb="2"> 
    <LocalCallId>0</LocalCallId> 
</CallConnectReq> 

現在我實現這一目標如下:

var xnameSpace = new XmlSerializerNamespaces(); 
       xnameSpace.Add("Xmlns", Constants.XmlNameSpaceValue); 
       var xmlSerializer = new XmlSerializer(objToSerialize.GetType()); 
       var stringWriter = new StringWriter(); 
       xmlSerializer.Serialize(stringWriter, objToSerialize, xnameSpace); 
       return stringWriter.ToString().**Replace("xmlns:","");** 

但我想到刪除「xmlns:」標記而不使用Replace()方法。 有什麼辦法可以做到嗎?

+0

的可能重複的[XmlSerializer的:除去不必要的xsi和xsd命名空間(http://stackoverflow.com/questions/760262/xmlserializer-刪除不必要的xsi和xsd命名空間) – jgauffin 2011-12-22 07:35:46

+0

@deathrace - 類型是什麼樣的,什麼是當前的xml看起來像? – 2011-12-22 07:51:44

+0

@jgauffin(我以前的評論是不正確的,順便說一句) - 它肯定是*相關的*,但獲取默認命名空間的語法略有不同,並且需要對類型定義進行其他更改 - 足夠分離,IMO – 2011-12-22 07:55:31

回答

1

如果真正Xmlns(其中,重申,我堅信是xmlns一個錯字,如果不是:是一個不好的選擇,因爲它增加了混淆),那麼:

使用

[XmlRoot("CallConnectReq")] 
public class CallConnectRequest { 
    [XmlAttribute("Xmlns"), Browsable(false)] 
    [EditorBrowsable(EditorBrowsableState.Never)] 
    public string XmlNamespace { 
     get { return "urn:interno-com:ns:a9c";} set { } 
    } 
    [XmlAttribute("reqId")] 
    public int RequestId { get; set; } 
    [XmlAttribute("msbNb")] 
    public int MessageNumber { get; set; } 

    [XmlElement("LocalCallId")] 
    public int LocalCallId { get; set; } 
} 

其中寫道:

<?xml version="1.0" encoding="ibm850"?> 
<CallConnectReq Xmlns="urn:interno-com:ns:a9c" reqId="9" msbNb="2"> 
    <LocalCallId>0</LocalCallId> 
</CallConnectReq> 
3

要添加只是默認命名空間:

var xnameSpace = new XmlSerializerNamespaces(); 
xnameSpace.Add("", "urn:interno-com:ns:a9c"); 
var ser = new XmlSerializer(typeof (CallConnectRequest)); 
ser.Serialize(destination, new CallConnectRequest(), xnameSpace); 

有:

[XmlRoot("CallConnectReq", Namespace = "urn:interno-com:ns:a9c")] 
public class CallConnectRequest {} 
+0

它仍然提供以下輸出:<?xml version =「1.0」encoding =「utf-16」?> 0 我想從中刪除'xmlns:'。 – deathrace 2011-12-22 08:12:30

+0

@deathrace然後你誤用了變化;你不應該在'xnameSpace.Add'中使用''Xmlns''。它看起來像你有:'xnameSpace.Add(「Xmlns」,「urn:blah」)' - 但這是**不**我在我的回答 – 2011-12-22 08:14:44

+0

哦,我的錯誤。這工作得很好。其實問題是我使用XmlType而不是XmlRoot。非常感謝你。 – deathrace 2011-12-22 08:20:20