在C#中如何编码XML以在页面的JavaScript部分中将其输出到JSON内部

cap*_*gon 2 javascript c# xml asp.net json

我有一个上传KML文件的处理程序,并返回带有KML文件作为属性的JSON:

context.Response.Write("{\"name\":\"" + FileName + 
"\",\"type\":\"" + FileType + 
"\",\"size\":\"" + FileSize + 
"\",\"region_id\":\"" + regionID + 
"\",\"kml\":\"" + HttpUtility.HtmlEncode(xmlData) + "\"}");
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试使用KML进行编码,HttpUtility.HtmlEncode但我的响应中出现错误:

未捕获的异常:无效的JSON

如何在C#中对XML/KML文件进行属性编码,以便稍后在JavaScript中对其进行解码?

编辑#1:根据Cheeso的评论 我在IIS 7.5 Windows 7上使用ASP.NET,.NET版本4.我的处理程序是一个ashx文件.如果我HttpUtility.HtmlEncode(xmlData)从响应中省略KML数据(),则响应正常.

编辑#2 我也尝试使用System.Web.Script.Serialization.JavaScriptSerializer主持人的评论.我这样使用它:

System.Web.Script.Serialization.JavaScriptSerializer serializer;
context.Response.Write("{\"name\":\"" + FileName + 
"\",\"type\":\"" + FileType + 
"\",\"size\":\"" + FileSize + 
"\",\"region_id\":\"" + regionID + 
"\",\"kml\":\"" + serializer.Serialize(xmlData) + "\"}");
Run Code Online (Sandbox Code Playgroud)

我仍然得到相同的"无效的JSON"错误.

Mar*_*ell 9

你想构建JSON,对......显然我建议使用JSON序列化器是荒谬的....

string FileName = "foo.txt", FileType = "csv";
int FileSize = 1134, regionID = 12;
string xml = "<foo><bar/></foo>";

string json= new JavaScriptSerializer().Serialize(new {
    name = FileName,
    type = FileType,
    size = FileSize,
    region_id = regionID,
    kml = xml
});
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,使用预先封装的串行器对于数据的边缘情况更方便且更健壮.

  • @capdragon我不明白你的态度; 我的意图仅仅是提出另一个合适的答案.我不是在告诉你选择哪个选项,我真的很高兴另一个答案能满足你的需求.但我也想到下一位读者,他们可能不会做出同样的决定.我使用了两种形式的JSON构造 - 两者在不同的场景中都是完全有效的.你提出另一个选择的投诉是什么?我不强迫你.说真的:减轻. (11认同)