0
具有與所述代碼問題呈現表現:的XDocument,Xelement.Save不正確編碼
string serializedLicence = SerializationHelper.ToXML(licenceInfo);
var licenceFileXml = new XElement("Licence", new XElement("LicenceData", serializedLicence)));
XmlDocument signedLicence = SignXml(licenceFileXml.ToString(), Properties.Resources.PRIVATE_KEY);
signedLicence.Save(saveFileDialogXmlLicence.FileName);
所創建的文件已經串的一個不正確的編碼發送到的XElement構造藏漢作爲簽名,與定製SignXml()
分配方法(它使用XmlDocument.DocumentElement.AppendChild()
方法創建簽名,但現在這是無關緊要的)。輸出:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<Licence>
<LicenceData><?xml version="1.0" encoding="utf-16"?>
<LicenceInfo
//stuff stuff stuff
</LicenceInfo></LicenceData>
<Signature><SignedInfo xmlns="h stuff stuff stuff</Signature>
</Licence>
所以基本上我正在採取序列化的對象字符串,並把它放在標記之間,這部分編碼錯誤。調試器告訴我,XElement對象中的文本在創建之後正在持有<
和>
。我可以手動解析它,但這是不合適的。
注:befeore的是,我是直接簽署deserialisation xml和它工作得很好,所以爲什麼XDocument
使用不同的編碼XmlSerializer
/XmlDocument
對象,我不能弄明白。
另外:我想我可以只使用XmlDocument
對象來構建文件,但我很好奇什麼是錯的。
謝謝。我是xml的新手,我沒有想到,節點標記之間的字符串應該被解析。奇蹟般有效。 – Tarec
@Tarec它必須被解析,因爲否則就不會得到適當的表示XML的'XElement' /'XAttribute'實例的結構。 – MarcinJuraszek