i'm在呈现的代码方面存在问题:
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>
因此,基本上我正在使用序列化对象字符串并将其放在标记之间,并且该部分编码错误。调试器向我显示,Xlement Object中的文本仅在创建它之后持有<
和>
。我可以手动解析它,但这是不合适的。
注意:befeore,我直接签署了Deserialisation XML,并且效果很好,所以我无法弄清楚为什么XDocument
使用与XmlSerializer
/XmlDocument
对象不同的编码。
也:我认为我可以只使用XmlDocument
对象来构建文件,但是我很好奇怎么了。
您将serializedLicence
添加为string
,因此它被视为文本,而不是XML,这就是为什么在您的文档中看起来像该文本。
var licenceFileXml = new XElement("Licence",
new XElement("LicenceData",
XDocument.Parse(serializedLicence).Root)));