2012-11-24 13 views
7

Jak kodować ' do \u0027 z JSON.NET?Jak kodować pojedynczy cudzysłów/apostrof w JSON.NET

więc, że ciąg json będzie wyglądać mniej więcej tak:

{"Id":8,"CompanyName":"Jane\u0027s bakery"} 
+1

Dlaczego trzeba kodować apostrofy w ten sposób? '{" Id ": 8," CompanyName ":" Jane's bakery "}' jest prawidłowym JSON. –

+0

ParseJSON JjQuery zawodzi z wyjątkiem z powodu apostrofu. – CoffeeCode

+0

Rozumiem. W jaki sposób twój kod front-end zdobywa JSON? –

Odpowiedz

6

Json.NET 4.5 Release 11 dodano opcję kontrolowania ciąg ucieczki. Jedną z opcji jest uciec od wszystkich znaków HTML, które zawierają pojedyncze cudzysłowy.

JsonWriter.StringEscapeHandling

13

Próbka połączeń

Newtonsoft.Json.JsonConvert.SerializeObject(your_object, 
    Newtonsoft.Json.Formatting.None, 
    new Newtonsoft.Json.JsonSerializerSettings 
    { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml }) 
+0

czy można kodować za pomocą pojedynczego cudzysłowu? na przykład '{'Id': 8, 'CompanyName': 'Jane \ u0027s bakery'}'? – Serge

2

Sądziłem, miałem ten sam wymóg, ale komentarz @ nick_w za uświadomił mi, że nie potrzeba do ucieczki apostrofów w ogóle.

Jeśli generujesz json jako ciąg w kodzie po stronie serwera, a następnie wyprowadzasz go do javascript po stronie klienta, aby można go było przekonwertować na obiekty javascript, a następnie wymuszenie nie jest wymagane.

(kod pokazany używając stylu asp składni)

Używanie dodatkowych czynności wymagających ucieczki apostrofów ...

var myData = JSON.parse('<%=myServerGeneratedStringWithSingleQuotesEscaped %>'); 

Korzystanie z JSON, jak to jest ...

var myData = <%=myServerGeneratedString %>; 

Javascript zinterpretuje niecytowany ciąg znaków, taki jak

[{"name": "Bill"}, {"name": "Ted"}]

jako obiekty javascript.

Ponieważ tak łatwo można się pomylić, gdy mamy do czynienia z ciągami po stronie serwera i po stronie klienta, przypomnienie może być przydatne dla kogoś. Może, ale nie musi, odnosić się do PO - jestem pewien, że istnieje wiele przypadków, w których pojedyncze cytaty rzeczywiście potrzebują ucieczki.

+0

Dzięki za tę podpowiedź. Ale jeśli parametr 'myServerGeneratedString' jest pusty, a użytkownik zrzuci pojedyncze limity, wystąpi błąd składniowy JavaScript, którego nie można obsłużyć. Jeśli trzymasz pojedyncze przydziały i 'myServerGeneratedString' jest pusty, nie będzie więcej szkód niż pusty ciąg, który możesz sprawdzić. Dlatego trzymam je nawet w jakiś sposób brzydkie. –