Включите объект 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 :
как фактическая строка напечатана в консоли :
Вывод : Newtonsoft.Json должен был преобразовать объект в правильное строковое представление json. Больше никаких усилий. необходимый.
обновление :
отвечая на ваше редактирование, у меня есть сильное чувство, что это, опять же, то же самое представление в другом инструменте (скрипач). Это \"
- это представление двойных кавычек во многих платформах программирования, потому что простые двойные кавычки ("
) считается концом / началом строки (просто говоря, если вы пропустили эту информацию).