2010-09-13 143 views
4

是否有一種簡單的方法可以從XML根元素中刪除名稱空間。我曾嘗試過如何從XML根元素中刪除名稱空間?

[XmlRootAttribute("MCP", Namespace = "", IsNullable = false)]  

上的可序列化類。但沒用。仍然得到相同的結果。

樣品類

[Serializable] 
[XmlRootAttribute("MCP", Namespace = "", IsNullable = false)]  
public class BINDRequest 
{ 
    public BINDRequest() 
    { 

    } 
    [XmlAttribute] 
    public string CLIENT_REQUEST_ID { get; set; } 

    public BINDRequestBody BIND { get; set; } 

} 

結果XML

<?xml version="1.0" encoding="utf-8"?> 
<MCP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" CLIENT_REQUEST_ID="1"> 
    <BIND CLIENT_ID="test" PASSWORD="test" /> 
</MCP> 

我不理解則什麼用在XmlRootAttribute指定namsespace佔地

+0

需要有一個命名空間,所以你可以有兩個類具有相同的名稱,並在它們之間進行區分。此外,如果你在外部類中鏈接,他們可能會與你自己的衝突,所以你應該區分。如果您鏈接來自兩個來源的Profile對象,則在您對它們進行編程時它們需要有所不同。 – 2010-09-13 09:21:29

+0

@Mikael,我明白...但如果我指定命名空間爲空,那麼它不應該包括它..對嗎? – RameshVel 2010-09-13 09:26:11

+0

和大膽告訴你如何。我只是說明爲什麼命名空間是有用的,而且你應該總是有一個。 – 2010-09-13 11:10:55

回答

12

試試這個:

public class BINDRequest 
{ 
    [XmlAttribute] 
    public string CLIENT_REQUEST_ID { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var request = new BINDRequest 
     { 
      CLIENT_REQUEST_ID = "123" 
     }; 
     var serializer = new XmlSerializer(request.GetType()); 
     var xmlnsEmpty = new XmlSerializerNamespaces(); 
     xmlnsEmpty.Add("", ""); 
     using (var writer = XmlWriter.Create("result.xml")) 
     { 
      serializer.Serialize(writer, request, xmlnsEmpty); 
     } 
    } 
} 
+1

謝謝。它按預期工作 – RameshVel 2010-09-13 09:36:38

+0

非常感謝! – 2014-10-08 22:50:21

相關問題