Próbuję POST zaktualizować obiekt do interfejsu API serwera REST z mojego klienta. Używam RestSharp i dodaję reprezentację JSON mojego obiektu do treści mojej prośby. Jednak moja reprezentacja ciągów serializowanego obiektu ma nieprawidłowy format. Serwer je odrzuca.Serializowane wyjście JSON ma formatowanie ze zmienną C#
Moja prośba wygląda mniej więcej tak (użyłem Skrzypek je zdobyć)
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}"
Próbowałem serializacji mojego obiektu z Json.NET, wewnętrznej serializatora Json RestSharp oraz z JavaScriptSerializer od System.Web.Script .Serializacja. Wszystkie zwracają ciąg w takim formacie. Wiem, że powodem takiego formatowania jest to, że C# wymyka się podwójnym cudzysłowom, aby mógł poprawnie wyświetlać je wewnątrz, ale nie rozumiem, w jaki sposób mam je przekazać do mojego żądania bez tego formatowania z zachowaniem. Wiem na pewno, że poprawnie sformułowany JSON jest akceptowany przez serwer.
Obiekt, który próbuję serializować wygląda następująco
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; }
EDIT: Przeniesiony moje rozwiązanie stąd do odpowiedzi.
Wygląda na to, że masz podwójną serializację. Czy nie możesz pokazać akcji PUT kontrolera? – Ghukas
Tak, podwójna serializacja była dokładnie moim problemem. Właśnie dodawałem informacje do mojego pierwotnego posta, aby uwzględnić te informacje. Dziękuję Ci. – filipv
@filipv możesz chcieć przenieść swoje rozwiązanie (że był podwójnie serializowany) do odpowiedzi i zaakceptować to. Wtedy ludzie mający ten problem w przyszłości będą mogli lepiej znaleźć rozwiązanie. –