Включите объект C# в строку json, как обрабатывать двойные кавычки

Я использую Newtonsoft.JSON для анализа объекта в строку json. Он возвращает что-то вроде этого:

{"code":-1,"idName":"empty","idValue":0,"message":"Failed,can not read object from body"}

это не действительная строка json, я думаю, кто-нибудь может меня понять?

что я хочу, это что-то вроде этого:

{"code":-1,"idName":"empty","idValue":0,"message":"Failed,can not read object from body"}  

public static class CommonUtility
{
    // format response string
    public static string FormatResponseString(int code, string idName, long idValue, string message)
    {
        ResponseString rs = new ResponseString();
        rs.code = code;
        rs.idName = idName;
        rs.idValue = idValue;
        rs.message = message;

        string json = JsonConvert.SerializeObject(rs);
        return json;
    }
}

public class ResponseString
{
    public int code;
    public string idName;
    public long idValue;
    public string message;
}

EDIT: это фактический json из ответа fidder TextView, который я вижу:

"{"code":-1,"idName":"empty","idValue":0,"message":"Failed,can not read object from body"}"

сценарий это: Я поместил сериализованную строку json в метод CreateResponse web api. Я могу видеть строка ответа в fidder, как я сказал в вопросе, который не является допустимым json

Request.CreateResponse(HttpStatusCode.Created, returnString);

returnString является строкой json из сериализованного ResponseString объект

Я не думаю, что это допустимая строка, я ошибаюсь?

2 ответов


наконец, это исправить. поделиться с вами, ребята.

Причины:
Я предполагаю, что это проблема двойной сериализации. Кажется ASP.NET Web api 2 framework сделает сериализацию автоматически для нас. вот почему я ... --3--> а то Debug.Write(json) строка, она работает хорошо.

string json = JsonConvert.SerializeObject(rs);     
Debug.Write(json);

но после вызова скрипачом веб-API, веб-APIreturned ответ с недопустимым json (\"), как я сказал выше. это произошло на других клиенты, такие как ios, android устройств.

потому что веб-api делает сериализацию для меня, и я делаю дополнительную явную сериализацию также string json = JsonConvert.SerializeObject(rs); это означает, что я запускаю другой parseJson, который не нужен.

на мой вопрос здесь, я просто сразу положить объект, который не сериализуется в CreateResponse метод. Request.CreateResponse(HttpStatusCode.Created, rs); и он возвращает действительный json для fidder и других клиентов.

как это исправить проблема: Запрос.CreateResponse (HttpStatusCode.Создано, rs);

public static class CommonUtility
    {
        // format response string
        public static ResponseString FormatResponseString(int code, string idName, long idValue, string message)
        {
            ResponseString rs = new ResponseString();
            rs.code = code;
            rs.idName = idName;
            rs.idValue = idValue;
            rs.message = message;

            return rs ;
        }
    }

    public class ResponseString
    {
        public int code;
        public string idName;
        public long idValue;
        public string message;
    }

и в контроллере

ResponseString rs = new ResponseString();
                        rs = CommonUtility.FormatResponseString(0, "pacelId", returnPacelId, "Succeed,created items in db success");
                        return Request.CreateResponse(HttpStatusCode.Created, rs);

Я подозреваю, что вы видели это в отладчике. Это не фактическая строка, а просто представление в отладчике visual studio. Например, я тестировал с помощью этого кода:

private static void Main(string[] args)
{
    var station = new Station {Name = "Duren Kalibata", LastTemperature = 45, MostRecentDate = DateTime.Now};
    var str = JsonConvert.SerializeObject(station);
    Console.WriteLine(str);
}

как str значение, отображаемое в окне просмотра visual studio : enter image description here

как фактическая строка напечатана в консоли : enter image description here

Вывод : Newtonsoft.Json должен был преобразовать объект в правильное строковое представление json. Больше никаких усилий. необходимый.

обновление :

отвечая на ваше редактирование, у меня есть сильное чувство, что это, опять же, то же самое представление в другом инструменте (скрипач). Это \" - это представление двойных кавычек во многих платформах программирования, потому что простые двойные кавычки (") считается концом / началом строки (просто говоря, если вы пропустили эту информацию).