我使用C#代碼更多或更少的這樣的序列化對象到XML:.NET XmlSerializer到Element FormDefault = Unqualified XML?
XmlSerializer xs1 = new XmlSerializer(typeof(YourClassName));
StreamWriter sw1 = new StreamWriter(@"c:\DeserializeYourObject.xml");
xs1.Serialize(sw1, objYourObjectFromYourClassName);
sw1.Close();
我想它序列是這樣的:
<ns0:Header xmlns:ns0="https://mynamespace/">
<SchemaVersion>1.09</SchemaVersion>
<DateTime>2009-12-15T00:00:01-08:00</DateTime>
而是,它是這樣做的:
<Header xmlns="https://mynamespace/">
<SchemaVersion xmlns="">V109</SchemaVersion>
<DateTime xmlns="">2010-03-08T18:21:09.100125-08:00</DateTime>
它的序列化方式不適用於我計劃使用的XPath,並且與我的BizTalk模式不匹配。最初我使用BizTalk 2006架構中的XSD.exe構建類,然後使用它作爲WCF Web服務的參數。
這可能與一個稱爲元素FormDefault = Qualified或Unqualified的選項有關。在BizTalk中,我將模式設置爲「Unqualified」,這正是我想要的。
序列化程序是否有任何方式輸出「不合格」結果?
感謝,
尼爾·沃爾特斯
更新:關於日期時間
樣本屬性:
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public System.DateTime DateTime
{
get
{
return this.dateTimeField;
}
set
{
this.dateTimeField = value;
}
}
的BizTalk提供它稱之爲晉升(或區分)領域,其中使用XPath拉出個別元素的價值。我在名爲StylusStudio的工具中檢查了BizTalk的XPath,而Biztalk'x xpath與上面的xmlns =''字段無關。
我的WCF Web服務所做的第一件事是將對象序列化爲字符串(使用UTF16編碼)並將其存儲在SQL數據庫的XML列中。它是從那裏我看到上面的XML樣本與xmlns =「」。
的XPath:
/*[local-name()='Header' and namespace-uri()='https://mynamespace/']/*[local-name()='DateTime' and namespace-uri()='']
你將哪些屬性應用於你的類和屬性? – 2010-03-09 18:36:43
我在我的界面上使用[XmlSerializerFormat]。我希望類/屬性的屬性與xsd.exe生成的完全相同,因此我隨時可以更改模式和regen類。 – NealWalters 2010-03-09 18:43:43
我使用DateTime屬性的樣本更新了原始帖子。 – NealWalters 2010-03-09 18:50:22