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

在C#中,如何对XML进行编码以将其输出到页面JavaScript部分的JSON中,c#,javascript,asp.net,xml,json,C#,Javascript,Asp.net,Xml,Json,我有一个处理程序,它上载KML文件并返回JSON,其中KML文件作为属性: context.Response.Write("{\"name\":\"" + FileName + "\",\"type\":\"" + FileType + "\",\"size\":\"" + FileSize + "\",\"region_id\":\"" + regionID + "\",\"kml\":\"" + HttpUtility.HtmlEncode(xmlData) + "\"}"); 如

我有一个处理程序,它上载KML文件并返回JSON,其中KML文件作为属性:

context.Response.Write("{\"name\":\"" + FileName + 
"\",\"type\":\"" + FileType + 
"\",\"size\":\"" + FileSize + 
"\",\"region_id\":\"" + regionID + 
"\",\"kml\":\"" + HttpUtility.HtmlEncode(xmlData) + "\"}");
如您所见,我试图使用
HttpUtility.HtmlEncode
对KML进行编码,但我的响应中出现了一个错误:

未捕获异常:无效的JSON

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

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

编辑#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) + "\"}");

我仍然得到相同的“无效JSON”错误

HTML编码器编码
您想要构建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
});
string FileName=“foo.txt”,FileType=“csv”;
int FileSize=1134,regionID=12;
字符串xml=”“;
string json=new JavaScriptSerializer().Serialize(新{
name=文件名,
type=文件类型,
大小=文件大小,
region_id=regionID,
kml=xml
});

在大多数情况下,使用预先封装的序列化程序对于数据的边缘情况更方便、更健壮。

为什么不使用合适的JSON编码库?这里有一个列表:为什么不使用JavaScriptSerializer或JSON.NET呢?@Pekka oh C#一点也不——它也不能处理XML、正则表达式甚至DateTime。不过,.NETBCL做得很好:)@capdragon对;现在我不再使用手机了,我添加了一个例子。坦率地说,你上面的语气既无礼又不恰当。如果您不选择使用对象级序列化程序,这取决于您,但它(如图所示)是解决此问题的一个非常有效的答案。特别是考虑到您没有通过确保自己的数据正确编码来保护呼叫客户端(这可能是问题,也可能不是问题,取决于
FileName
FileType
等的候选值);我不介意任何一种方式,但我不会从@Mark收到通知警报。不幸的是,你生气了——没有人是故意的。这正是我所需要和工作的!谢谢人们所有其他荒谬的评论都是如何将.net对象序列化为JSON+1。对不起,你误解了我不想构建JSON的问题。。。我有JSON,我想在JSON中安全地编码xml。@capdragon-不,我理解这个问题-我只是提出了一种替代的(更简单,IMO)实现方法,它也解决了编码问题issue@Mark-好吧,伙计,你是对的,你是所有国王中的大主持人MVP国王和斯塔克沃夫之神。一行代码比上面的代码简单。我不需要对字符串进行编码,我需要您的序列化解决方案,因为再没有更好的了。你快乐吗?这就是你想听的吗?@capdragon我不明白你的态度;我的意图只是提出另一个合适的答案。我不会告诉你该选择哪一个,我真的很高兴另一个答案能满足你的需要。但我也在考虑下一位读者,他们可能不会做出同样的决定。我使用了这两种形式的JSON构造——它们在不同的场景中都是完全有效的。你对我提出另一个选择有什么不满?我不是强迫你。严肃地说:放松点。