2009-06-29 4 views
2

Ok, mir zuerst durch einen Blick auf diese URL hören out:Kann nicht bekommen <in JSON-String zu zeigen

http://api.flickr.com/services/feeds/photos_public.gne?format=json

Beachten Sie, wie die Beschreibung string hat es nicht codierte html wie < ,> usw.

hier ist, wie ich meine JSON zurück mit ASP.NET 3.5 und C#:

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); 

und hier ist die JSON durch diesen Code zurückgegeben, die aufgerufen wird, wenn ich hallo t meine .ashx und es nennt diesen Code in der Methode, die es enthält:

[{"ImageTag":"&lt;img src=&quot;http://www.ourdomain.com/image/540.jpg&quot; alt=&quot;&quot;&gt;"},{"ImageTag":"&lt;img src=&quot;http://www.ourdomain.com/image/642.jpg&quot; alt=&quot;&quot;&gt;"}] 

Nun, wie kann ich die codierten Zeichen tatsächlich bekommen zu zeigen, wie HTML-Zeichen in der Textzeichenfolge durch meine JSON zurückgegeben?

Ich möchte < zeigen < und so weiter wie Flickr konnte in ihrem JSON tun.

Wenn ich den Htmlencode herausnehmen:

string.Format (@ "", ImageUrl (p.Image, false));

Dann beginne ich die/U00 in meinem String zu erhalten:

[{"ImageTag":"\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e"}, 
... 

Warum JSON nicht zurück Flickrs alles andere als sauber html in ihrer Beschreibung?

+3

Sie müssen uns zeigen, was die toJSON Methode macht – Jab

Antwort

5

Verwenden Sie die Zeichenfolge an anderer Stelle? Wenn Sie es in Javascript verwenden, sollte es keine Rolle spielen, dass die < > Zeichen maskiert werden.

<script type="text/javascript" defer="defer"> 
document.body.innerHTML = "\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e"; 
</script> 

ist das gleiche wie:

<script type="text/javascript" defer="defer"> 
document.body.innerHTML = "<img src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\">"; 
</script> 

In Javascript, diese Strings ziemlich gleich sind, wenn es mit ihnen zu tun, etwas kommt.

3

Wenn die Werte nicht codiert werden sollen, warum werden sie dann über die HttpUtility.HtmlEncode-Methode ausgeführt?

Wenn die toJSON ist nicht etwas, das Sie Unicode-Codierung, den Charakter zu stoppen ändern können, dann werden Sie nur nach dem Aufruf eines ersetzen zu tun haben ...

string jsonString = imageList.ToJSON(); 
jsonString = jsonString.Replace("\u003c", "<").Replace("\u003e", ">"); 
context.Response.Write(jsonString); 
+0

Ich nahm den Encode und bekam dann \ u003 was ich hatte keine Ahnung, was das war ... – PositiveGuy

+0

Es ist Unicode. Ich wage zu erraten, dass Ihr JSON-Encoder auf irgendeine Form von Unicode voreingestellt ist. Unabhängig davon sollte der Client in der Lage sein, es zu interpretieren. –

Verwandte Themen