【发布时间】:2014-01-30 14:55:26
【问题描述】:
我遇到的代码有问题:
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 对象中的文本在创建之后就持有&lt; 和&gt;。我可以手动解析它,但这是不合适的。
注意:在此之前,我直接签署了反序列化 xml,它运行良好,所以我不明白为什么 XDocument 使用与 XmlSerializer/XmlDocument 对象不同的编码。
另外:我想我可以使用 XmlDocument 对象来构建文件,但我很好奇出了什么问题。
【问题讨论】:
标签: c# xml xml-serialization xml-signature