Сериализованный вывод JSON имеет форматирование c#
Я пытаюсь опубликовать обновленный объект для REST server API от моего клиента. Я использую RestSharp, и я добавляю JSON-представление моего объекта в тело моего запроса. Однако мое строковое представление сериализованного объекта имеет неправильный формат. Сервер отклоняет его.
мой запрос выглядит примерно так (я использовал Fiddler, чтобы получить его)
PUT https://myapp.net/api/PriceListItems/151276 HTTP/1.1
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/104.4.0.0
Content-Type: application/json
Host: myapp.net
Content-Length: 75
Accept-Encoding: gzip, deflate
"{"Id":151276,"AgendaId":0,"CurrencyId":1,"Code":"","Price":7.0}"
Я попытался сериализовать свой объект с помощью Json.NET, внутренний сериализатор JSON RestSharp и с JavaScriptSerializer из системы.Сеть.Скрипт.Сериализация. Все возвращают строку в таком формате. Я знаю, что причина такого форматирования заключается в том, что C# избегает двойных кавычек, поэтому он может отображать его правильно внутри, но я не понимаю, как я должен передать его в свой запрос без этого экранированного форматирования. Я точно знаю, что правильно сформированный JSON принимается сервером.
объект, который я пытаюсь сериализовать выглядит так
public class PriceListItem
{
public static PriceListItem CreatePriceListItem(int id, int agendaId, int currencyId, string code, string unit, decimal price)
{
var priceListItem = new PriceListItem
{
Id = id,
AgendaId = agendaId,
CurrencyId = currencyId,
Code = code,
Price = price
};
return priceListItem;
}
public int Id { get; set; }
public int AgendaId { get; set; }
public int CurrencyId { get; set; }
public string Code { get; set; }
public decimal Price { get; set; }
изменить: Переехал мой решением от ответов.
2 ответов
Я просто прочитал еще одну тему по этой проблеме здесь. Проблема была в том, что я сериализовал объект дважды.
вместо
request.AddBody(JsonConvert.SerializeObject(priceListItem));
Я должен использовать
request.AddBody(priceListItem);
в любом случае, может быть, это поможет кому-то еще. Однако мне кажется странным, что объект сериализуется автоматически.
у меня также была эта проблема, и моим обходным путем было создать JObject с Newtonsoft и передать это.
либо:
JObject jBytes = Object.Parse(JsonConvert.SerializeObject(myObject, MyDateTimeFmtString);
или
JObject jBytes = JObject.FromObject(myObject, MyJsonSerializer);
первый случай был моим вторым выбором, но я думаю, что есть ошибка в Newtonsoft, где JObject.FromObject игнорирует DateFormatString в JsonSerializer.