Подтвердить что ты не робот

Newtonsoft.Json SerializeObject без обратных косых черт

С учетом кода:

dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);

Выход ниже:

"{\"Bar\":\"something\"}"

При отладке большого json-документа его трудно прочитать - используя встроенные функции Newtonsoft.Json(не регулярное выражение или хаки, которые могут сломать вещи), есть ли способ сделать вывод строки с valie:

{Bar: "something"}
4b9b3361

Ответ 1

То, что вы видите в отладчике при просмотре значения json, - это строковое значение, которое вы должны использовать в файле С# для получения того же значения.

Действительно, вы могли бы заменить

dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);

с

string json = "{\"Bar\":\"something\"}";

без изменения поведения программы.

Таким образом, чтобы получить другое значение, вы должны изменить способ JsonConvert, но JsonConvert соответствует стандарт JSON, забудьте об этом!

Если вы фактически не сериализуете ExpandoObject (или любой другой закрытый класс из-под контроля), вы можете использовать DebuggerDisplayAttribute для типов, которые вы сериализуете в json, чтобы определить, как объект будет отображаться во время отладки (в вашем коде, экземпляре foo).

Но строка - это строка и VisualStudio прав: двойные кавычки должны быть экранированы.

Ответ 2

Если это произойдет с вами при возврате значения из метода WebApi, попробуйте вернуть сам объект, вместо того, чтобы сериализовать объект и вернуть строку json. WebApi будет сериализовать объекты в json в ответе по умолчанию; если вы вернете строку, она избежит любых двойных кавычек, которые она находит.

Итак, вместо:

public string Get()
{
    ExpandoObject foo = new ExpandoObject();
    foo.Bar = "something";
    string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
    return json;
}

Try:

public ExpandoObject Get()
{
    ExpandoObject foo = new ExpandoObject();
    foo.Bar = "something";
    return foo;
}

Ответ 3

Старый вопрос, но я нашел это,

В моем случае, я смотрел строку JSON в отладчике, и я обнаружил, что добавляет экранирование.

И когда я печатал JSON для консоли, это было без escape-символов. Надеюсь, что это поможет.

Ответ 4

Вместо использования Newstonsoft.Json вы должны использовать JavaScriptSerializer.Serialize Method:

dynamic foo = new ExpandoObject();
foo.Bar = "something";
var js = new JavaScriptSerializer( );
string json = js.Serialize(foo);

Этот метод производит точно результат, который вы ищете. Я читал об этом здесь.