【问题标题】:Write Serialized XML to String and Display in Browser将序列化的 XML 写入字符串并在浏览器中显示
【发布时间】:2011-03-23 18:21:13
【问题描述】:

我有一个需要作为加密 XML 字符串发送的序列化对象。我能够将序列化对象保存到格式良好的 XML 文件中,但这不是我想要的。我已经让 Rijndael 加密/解密为示例字符串工作。

Person person = new Person("Irish", "Chieftain");
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));

// Write serialized XML to file
System.Guid guid = System.Guid.NewGuid();
StreamWriter streamWriter 
    = new StreamWriter(@"C:\application" + "_" + guid.ToString() + ".xml")
xmlSerializer.Serialize(streamWriter.BaseStream, person);

我希望能够在浏览器中显示 XML 字符串,在加密之前,测试是否将正确的加密字符串发送到另一台机器上的解密方法。

我已经讨论了一周,并查看了关于 SO 的其他答案,例如: How to return XML in ASP.NET?

谁能告诉我在浏览器中将生成的 XML 显示为字符串的正确语法?

[更新] 这是我试图呈现 XML 的内容:

MemoryStream memoryStream = new MemoryStream();
XmlTextWriter xmlWriter2 = new XmlTextWriter(memoryStream, Encoding.UTF8); 
xmlWriter2.Formatting = Formatting.Indented;
xmlSerializer.Serialize(xmlWriter2, person);
memoryStream = (MemoryStream) xmlWriter2.BaseStream;
UTF8Encoding encoding2 = new UTF8Encoding();
stringData = encoding2.GetString(memoryStream.ToArray());
Response.ContentType = "text/xml";
Response.Write(stringData);

[更新 2]

如果我删除“text/xml”内容类型,当我查看源代码时会得到以下信息(正确吗?):

<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstName>Irish</FirstName>
  <SecondName>Chieftain</SecondName>
</Person>

[更新 3]

工作版本:

            #region Display original string
            // Write serialized XML to a string - Display purposes.
            MemoryStream memoryStream = new MemoryStream();
            XmlTextWriter xmlWriter2 
                = new XmlTextWriter(memoryStream, Encoding.UTF8);
            xmlWriter2.Formatting = Formatting.Indented;
            xmlSerializer.Serialize(xmlWriter2, person);
            memoryStream = (MemoryStream) xmlWriter2.BaseStream;
            UTF8Encoding encoding2 = new UTF8Encoding();
            stringData = encoding2.GetString(memoryStream.ToArray());

            Response.Clear();
            Response.ContentType = "text/xml";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetAllowResponseInBrowserHistory(true);
            Response.Write(stringData);
            Response.End();
            #endregion

【问题讨论】:

  • 我将您的 xml 粘贴到一个文本文件中,将其从 .txt 更改为 .xml 并在 IE 中打开它。没问题,它显示了树视图,一切都很好。我用 chrome 加载它,它显示的只是文本“Irish Chiegtain”
  • 感谢 Muad'Dib,标记为答案 :-)
  • 我在这里遗漏了一些东西:加密适用于哪里?加密的 XML 不符合 XML...
  • 我正在加密上面的 XML 并在接收机器上解密它。我想确保发出正确的 XML。

标签: asp.net serialization xml-serialization rijndaelmanaged


【解决方案1】:

对 XML 字符串进行 HtmlEncoding 也可以解决问题。

Response.Write(HttpUtility.HtmlEncode(stringData));

【讨论】:

    【解决方案2】:

    您很可能需要在 Response 对象上设置ContentType。这对应于 MIME 类型。对于 xml,它应该是 text/xml

    【讨论】:

    • 当我添加内容类型时,我得到:“XML Parsing Error: junk after document element”
    • 听起来像格式错误的 xml。我会在您的 Response.Write 处设置一个断点并查看 stringData。确保它有一个前导 标签
    • 我可以看到看似正确的 XML,但只有在我删除内容类型时才能看到?请参阅上面的更新 2。
    • 您的 XML 看起来不错。你用什么浏览器看的? chrome 只会以“树视图”的方式显示文本,而不是标签。
    • Firefox 3.6、IE9 和 Chrome 都只显示文本,这让我感到困惑,但我仍然很好奇为什么内容类型会给出错误“垃圾”消息?
    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多