好的,首先通过查看此网址听取我的意见:
http://api.flickr.com/services/feeds/photos_public.gne?format=json
注意Description字符串中是否包含非编码的html,例如&lt ;,>等。
以下是我使用ASP.NET 3.5和C#返回JSON的方法:
context.Response.ContentType = "text/plain";
context.Response.Charset = Encoding.UTF8.ToString();
int i = 1;
List<Product> products = GetTestProducts();
List<CrImageList> imageList = new List<CrImageList>();
foreach(Product p in products)
{
string imageTag = HttpUtility.HtmlEncode(string.Format(@"<img src=""{0}"" alt="""">", ImageUrl(p.Image, false)));
imageList.Add(new CrImageList{ImageTag = imageTag});
i++;
}
string jsonString = imageList.ToJSON();
context.Response.Write(jsonString);
以下是此代码返回的JSON,当我点击我的.ashx时调用它,并在包含它的方法中调用此代码:
[{"ImageTag":"<img src="http://www.ourdomain.com/image/540.jpg" alt="">"},{"ImageTag":"<img src="http://www.ourdomain.com/image/642.jpg" alt="">"}]
现在我怎样才能让编码后的字符在我的JSON返回的文本字符串中显示为html字符?
我想&lt;显示&lt;就像Flickr能够用他们的JSON一样。
如果我拿出HtmlEncode:
string.Format(@“”,ImageUrl(p.Image,false));
然后我开始在我的字符串中获取/ u00:
[{"ImageTag":"\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e"},
...
那么为什么Flickr的JSON在其描述中没有返回任何干净的HTML?
答案 0 :(得分:5)
您是否在其他地方使用该字符串?如果您在Javascript中使用它,那么&lt;&gt;并不重要字符正在被转义。
<script type="text/javascript" defer="defer">
document.body.innerHTML = "\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e";
</script>
与:
相同<script type="text/javascript" defer="defer">
document.body.innerHTML = "<img src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\">";
</script>
在Javascript中,这些字符串在使用它们时几乎是一样的。
答案 1 :(得分:3)
如果您不想编码的值,那么为什么要通过HttpUtility.HtmlEncode方法运行它们?
如果ToJSON不是你可以改变以停止对该角色进行unicode编码的东西,那么你只需要在调用后进行替换......
string jsonString = imageList.ToJSON();
jsonString = jsonString.Replace("\u003c", "<").Replace("\u003e", ">");
context.Response.Write(jsonString);
答案 2 :(得分:0)
使用gson将对象转换为json字符串(java示例)
示例:
.custom-date-picker
gson maven依赖项:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String output = gson.toJson(input);