我正在使用.Net XmlSerializer
將對象序列化爲C#Windows窗體應用程序中的XML文檔。如何刪除xmlns:xsd屬性,但保留xmlns:xsi
根元素應該結束了看起來像:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:///C:/data//MySchema.xsd">
<!-- ... -->
</root>
在部分類(加入由xsd.exe
創建的部分類),我已加入下列屬性添加xsi:noNamespaceSchemaLocation
屬性。
[XmlAttribute("noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)]
public string xsiNoNamespaceSchemaLocation = @"file:///C://data//MySchema.xsd";
,並刪除所有其他名稱空間,但保留xsi
一個我用:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
,然後傳遞ns
到XmlSerializer.Serialize()
方法。
這個工程到目前爲止,但我不知道這是否正確。感覺就像我在刪除默認設置中那樣,只是試着再添加一塊它......看起來像是一種代碼味道。
也許有更好的辦法,只刪除xsd
,但離開默認xsi
,所以我不需要再次將其添加回來?
注:有這個一個懸而未決的問題已經從一段時間回來here,唯一的建議答案不適合,因爲它消除雙方xsd
和xsi
屬性。
你所做的事對我來說看起來是正確的。你可以看看內部並看到'XmlSerializer'使用['DefaultNamespaces'](http://referencesource.microsoft.com/#System.Xml/System/Xml/Serialization/XmlSerializer.cs,34e80c7c306a0313)當沒有指定。這就是爲什麼你默認看到'xsi'和'xsd'的原因。 –
@CharlesMager謝謝,看着我意識到我可以調整命名空間addtion:'ns.Add(「xsi」,XmlSchema.InstanceNamespace);' – Toby
@CharlesMager讀了一點,似乎你的評論是FWIW ,如果你想讓它成爲答案,我會接受它。 – Toby