我遇到的代码有问题:
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对象中的文本在创建后立即保持<
和>
。我可以手动解析它,但那是不合适的。
注意:请注意,我直接签署了反序列化xml并且工作正常,所以我无法弄清楚为什么XDocument
使用不同于XmlSerializer
/ XmlDocument
对象的编码
另外:我想我可以使用XmlDocument
对象来构建文件,但我很好奇有什么不对。
答案 0 :(得分:2)
您将serializedLicence
添加为string
,因此将其视为文本,而不是XML,这就是您在文档中看起来像这样的原因。
var licenceFileXml = new XElement("Licence",
new XElement("LicenceData",
XDocument.Parse(serializedLicence).Root)));