Сериализованный вывод 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.