Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xdocument,Xelement。保存不正确的编码_C#_Xml_Xml Serialization_Xml Signature - Fatal编程技术网

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>&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>

?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
实例的正确结构。