xdocument,xlement.save不正确编码



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>&lt;?xml version="1.0" encoding="utf-16"?&gt;
    &lt;LicenceInfo
    //stuff stuff stuff
    &lt;/LicenceInfo&gt;</LicenceData>
    <Signature>&lt;SignedInfo xmlns="h stuff stuff stuff</Signature>
</Licence>

因此,基本上我正在使用序列化对象字符串并将其放在标记之间,并且该部分编码错误。调试器向我显示,Xlement Object中的文本仅在创建它之后持有&lt;&gt;。我可以手动解析它,但这是不合适的。

注意:befeore,我直接签署了Deserialisation XML,并且效果很好,所以我无法弄清楚为什么XDocument使用与XmlSerializer/XmlDocument对象不同的编码。

也:我认为我可以只使用XmlDocument对象来构建文件,但是我很好奇怎么了。

您将serializedLicence添加为string,因此它被视为文本,而不是XML,这就是为什么在您的文档中看起来像该文本。

var licenceFileXml = new XElement("Licence",
                         new XElement("LicenceData",
                             XDocument.Parse(serializedLicence).Root)));

最新更新