C# Xdocument,Xelement。保存不正确的编码
我对提供的代码有问题:C# Xdocument,Xelement。保存不正确的编码,c#,xml,xml-serialization,xml-signature,C#,Xml,Xml Serialization,Xml Signature,我对提供的代码有问题: string serializedLicence = SerializationHelper.ToXML(licenceInfo); var licenceFileXml = new XElement("Licence", new XElement("LicenceData", serializedLicence))); XmlDocument signedLicence = SignXml(licenceFileXml.ToString(), Properties.Re
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>
?xml version=“1.0”encoding=“utf-16”?
许可证信息
//东西
/许可证信息
SignedInfo xmlns=“h stuff
所以基本上我把序列化的对象字符串放在标记之间,这部分编码错误。调试器告诉我,XElement对象中的文本在创建它之后就保存了
和
。我可以手动解析它,但这是不合适的
注意:在此之前,我直接对反序列化xml进行了签名,它工作得很好,因此我无法理解为什么XDocument
使用的编码与XmlSerializer
/XmlDocument
对象不同
另外:我想我可以使用
XmlDocument
对象来构建文件,但我很好奇出了什么问题。您将serializedlice
添加为string
,因此它被视为文本,而不是XML,这就是为什么它在您的文档中看起来像这样
var licenceFileXml = new XElement("Licence",
new XElement("LicenceData",
XDocument.Parse(serializedLicence).Root)));
谢谢。我是xml新手,我没想到会解析节点标记之间的字符串。这就像一个符咒一样。@Tarec必须解析它,因为否则您将无法获得表示xml的
XElement
/XAttribute
实例的正确结构。