JSON.NET deserialization 1000 1000.0 böylece tamsayı dönüşüm hatasına neden olduğunu düşünüyor, neden?

oy
0

I'in bir anahtar değeri çifti

number: 100,

Ben seri kaldırma yoluyla bunun için Sınıf mülkiyet hedefi vardır:

public int number { get; set; }

Ben bir dizeye dönüştürmek:

string myJson = Json.ToString(); //Json of type{Newtonsoft.Json.Linq.JObject}

Ben dize baktığımızda, bir dize olarak VS ayıklayıcısında, öyle olduğunu görüyoruz

number: 100.0

Yani ben:

var myOrder = JsonConvert.DeserializeObject<Order>(myJson);

Alırım :

Input string '100.0' is not a valid integer. Path 'items[0].units.number', line 16, position 24.

Ben Json olarak ayıklayıcısında myJson görüntülediğinizde doğruysa, ancak bir dize olarak bakıldığında bunun 100,0 olarak gösterir. Açıkça ToString operasyonu ya kaçırdım başka bir şey ile ilgili bir sorun var gibi görünüyor.

Herhangi bir tavsiye gerçekten takdir.

Şimdilik benim geçici çözüm benim hedef olarak aşağıdaki kullanmaktır:

public decimal number { get; set; }

DÜZENLE

Bu JObject üretmek için benim kodudur:

        public async Task<JObject> GetResponseAsync(string endPoint)
    {
        var response = await MakeGetRequestAsync(endPoint);
        return await ParseResponseAsync(response);
    }

    private async Task<JObject> ParseResponseAsync(HttpResponseMessage response)
    {
        var content = await response.Content.ReadAsStringAsync();
        var json = JObject.Parse(content);
        return json;
    }

DÜZENLEME 2

Json bir 3. parti hizmetinden REST çağrısına geliyor.

DÜZENLEME 3

Ben açıkça bir test olarak, aynı çağrı için, Postman gelen çağrı yanıtı kullanarak} { @ aracılığıyla bir dize olarak bütün Json dize tanımlamak vermedi ve bu güzel çalıştı. Öyleydi o başarısız doğrudan DİNLENME çağrısı kullanıldığında .

DÜZENLEME 4:

Orijinal Json fragmanı:

        units: {
            number: 100,
            numberUpdatedOn: 2018-11-21T00:00:00Z,
            priceUpdatedOn: 2018-11-21T00:00:00Z,
            price: {
                currency: GBP,
                amount: 1000.0000
            }
        },

DÜZENLEME 5.

Sanırım sorunu bulduk düşünüyorum. : 1000 'Ben Postman tepki başka bakış vardı ve Ham birimleri göstermeye bulundu: { numarası: 100.0000,' ve 'Pretty birimleri' göstermek için '' { numarasını

Belki bir şey eksik, ama bu gerçekten kafa karıştırıcı gibi görünüyor. Ben Ham veri 3. parti gerçekten ondalık aracılığıyla gönderdiğini gösterir sanırım. Sadece API belgelerine kontrol ve değer bir tamsayı gibi görünüyor, ama aslında bu bir ondalık olmasına rağmen bu özellik için herhangi bir tip belgeleri vardır. Hikâyenin ahlaki Ham görünümünü kontrol etmektir sanırım.

Edit 6:

DİNLENME Çağrı yanıtının Postacı Ham Görünüm:

units   {number:100.0000,numberUpdatedOn:2018-11-21T00:00:00Z,priceUpdatedOn:2018-11-21T00:00:00Z,price:{currency:GBP,amount:1000.0000}}

Postacı Pretty DİNLENME Çağrı yanıtının Görünüm:

        units: {
            number: 100,
            numberUpdatedOn: 2018-11-21T00:00:00Z,
            priceUpdatedOn: 2018-11-21T00:00:00Z,
            price: {
                currency: GBP,
                amount: 1000.0000
            }
Oluştur 27/11/2018 saat 18:16
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

İstediğiniz sınıfına doğrudan JObject dönüştürebilir miyim?

var myOrder = Json.ToObject<Order>();

Ne karşılaşmış sorunu nedeniyle olduğunu düşünüyorum JObject.ToString(). Ben 3 partiden sağlanmış edilebileceği gibi bu sana aynı JSON dizesi vermek güven olmaz. Belgelere göre olsa ben beklenebilir "number": 100yoluyla korunacak .ToString().

Cevap 27/11/2018 saat 23:12
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more