我有幾個xml檔案進來。有些有命名空間,有些沒有。如何在沒有例外的情況下準確地轉換這些。
這是我的代碼:
SASBM XML:
<ExportData xmlns="http://www.w3.org/2001/XMLSchema-instance">
<SASBM>...</SASBM>
</ExportData>
SASCS XML:
<ExportData>
<SASCS>...</SASCS>
</ExportData>
我的 XML 反序列化器:
_xmlSerializer = new XmlSerializer(typeof(ExportData));
_xmlSerializer.Deserialize(sr);
var tst = _xmlSerializer.Deserialize(sr);
還有我的班級:
/// <remarks/>
[System.Serializable()]
[System.ComponentModel.DesignerCategory("code")]
[System.Xml.Serialization.XmlType(AnonymousType = true)]
[System.Xml.Serialization.XmlRoot(Namespace = "http://www.w3.org/2001/XMLSchema-instance", IsNullable = false)]
public partial class ExportData
{
/// <remarks/>
public byte PlantCode { get; set; }
/// <remarks/>
public byte ServerID { get; set; }
/// <remarks/>
public uint MessageNumber { get; set; }
/// <remarks/>
public ExportDataSASAH SASAH { get; set; }
/// <remarks/>
public ExportDataSASCS SASCS { get; set; }
/// <remarks/>
public ExportDataSASBM SASBM { get; set; }
}
設定namespace要namespace=""修復它為一種檔案型別,但然后我得到的第二個例外。而且我不知道添加多個命名空間選項的方法。
uj5u.com熱心網友回復:
解決方法是重寫 XMLSerializer 命名空間函式
// helper class to ignore namespaces when de-serializing
public class NamespaceIgnorantXmlTextReader : XmlTextReader
{
public NamespaceIgnorantXmlTextReader(TextReader reader) : base(reader)
{
}
public override string NamespaceURI
{
get { return ""; }
}
}
然后洗掉命名空間屬性:
[System.Xml.Serialization.XmlRoot(Namespace = "http://www.w3.org/2001/XMLSchema-instance", IsNullable = false)]
最后決議如下:
_xmlSerializer.Deserialize(new NamespaceIgnorantXmlTextReader(sr));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369179.html
下一篇:回圈的XSLT排序不起作用
