2014-07-22 15 views
6

İstemcimden güncelleştirilmiş bir nesneyi REST sunucusu API'sine POST yapmaya çalışıyorum. RestSharp kullanıyorum ve neslimin JSON temsilcisini isteğimin gövdesine ekliyorum. Ancak, serileştirilmiş nesnenin dize temsili yanlış biçime sahip. Sunucu bunu reddediyor.JSON serileştirilmiş çıktı C# çıkış biçimi biçimlendirmesine sahip

Benim isteği ben Json.NET, RestSharp iç Json serileştiriciye ile ve System.Web.Script gelen JavaScriptSerializer ile benim nesne seri çalıştık

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}" 

böyle bir şey (Ben bunu elde etmek için Fiddler kullanılır) görünüyor .Serialization. Hepsi böyle bir biçimde bir dize döndürür. Bu tür biçimlendirmenin nedeninin C# 'in çift tırnaktan kaçtığını biliyorum, böylece içeride düzgün görüntülenebilir, ancak bu çıkış formatı olmadan isteğime nasıl geçeceğimi anlayamıyorum. JSON'un düzgün oluşturulmuş bir sunucu tarafından kabul edildiğini biliyorum.

Bu

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; } 

DÜZENLEME gibi görünüyor seri hale getirmek çalışıyorum nesne: buradan cevaplara benim çözüm taşındı.

+1

Çifte serileştirme işleminiz var gibi görünüyor. Kontrolörünüzün PUT Eylemini de göstermediniz mi? – Ghukas

+0

Evet, çift serileştirme tam olarak benim sorunumdu. Bu bilgiyi eklemek için sadece orijinal gönderiye bilgi ekliyordum. Teşekkür ederim. – filipv

+1

@filipv çözümünüzü (çift seri hale getirilmiş) bir yanıtın içine taşımak ve kabul etmek isteyebilirsiniz. Daha sonra bu problemi yaşayan insanlar çözümünüzü daha iyi bulabilirler. –

cevap

10

Bu sorun hakkında başka bir konu okudum here. Sorun, nesneyi iki kez serileştirmekti.

yerine

request.AddBody(JsonConvert.SerializeObject(priceListItem)); 

I belki başkası yardımcı olacaktır, neyse

request.AddBody(priceListItem); 

kullanmış olmalıdır. Garip buluyorum, ancak nesne otomatik olarak serileştirildi.

-1

Ayrıca bu sorun vardı ve benim çözümüm Newtonsoft ile bir JObject oluşturmak ve bunu geçmek oldu.

Ya:

JObject jBytes = JObject.FromObject(myObject, MyJsonSerializer); 

ilk vaka

JObject jBytes = Object.Parse(JsonConvert.SerializeObject(myObject, MyDateTimeFmtString); 

veya

benim ikinci seçim oldu, ama ben JObject.FromObject JsonSerializer içinde DateFormatString görmezden Newtonsoft bir hata olduğunu düşünüyorum.