Как правильно заставить JSON.Net экранировать символы косой черты (solidus)? - PullRequest
6 голосов
/ 27 апреля 2011

Так что по деловым причинам мне нужно заставить JSON.NET экранировать BLOB-объект JSON следующим образом:

{ url: 'http://some.uri/endpoint' }

Как

{ "url": "http:\/\/some.uri\/endpoint" }

То есть, ему нужно экранировать символы солидуса с косой чертой. Я знаю спецификация JSON этого не требует, и технически они равны, но в этой конкретной ситуации мне нужно создать точно такую ​​же строку с JSON.NET, которую я получаю откуда-то еще .

Какой лучший способ заставить JSON.NET сделать это?

Имеет ли смысл создать новый подкласс JSONConverter (например, MyPedanticStringConverter) и использовать его таким образом?

string json = JSONConvert.SerializeObject(
    myObject, 
    Formatting.None, 
    new MyPedanticStringConverter());

1 Ответ

2 голосов
/ 21 июня 2011

Если вы ищете универсальное решение, возможно, стоит написать конвертер.

Другим решением было бы добавление свойства в класс следующим образом:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class MyObject
{
    public string Url
    {
        get;
        set;
    }

    [JsonProperty("url")]
    private string UrlJson
    {
        get { return this.Url.Replace("/", "\\/"); }
    }
}

(Очевидно, вы можете изменить метод Replace на более сложный и более тщательный).

Надеюсь, это поможет.

Mikey

...