5

「文字列を整数に変換できませんでした: 3.500. json がオブジェクトに変換中のパス 'Quantity'' 。

json:

{"ProductCalcKey":"xxx","PaperType":"1","Quantity":"3.500"}

物体:

public class UnitPrice
{
    public int UnitPriceId { get; set; }
    public int QuantityMin { get; set; }
    public int QuantityMax { get; set; }
    public decimal Price { get; set; }
    public string ProductCalcKey { get; set; }
    public PaperType? PaperType { get; set; }
    public int Quantity { get; set; }
}

私は次の方法を使用しています。

protected object FromJsonToObject(Type t)
{
    Context.Request.InputStream.Position = 0;
    string json;
    using (var reader = new StreamReader(Context.Request.InputStream))
    {
        json = reader.ReadToEnd();
    }

    // todo: string to integer such as '222.222.222'
    return JsonConvert.DeserializeObject(json, t, new IsoDateTimeConverter());
}

jsontext に触れずにこの問題を解決するにはどうすればよいですか?

4

1 に答える 1

9

私はこの方法で問題を解決しました。

public class FormatConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (objectType == typeof(int))
        {
            return Convert.ToInt32(reader.Value.ToString().Replace(".", string.Empty));
        }

        return reader.Value;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(int);
    }
}


[Test]
public void ConvertJson()
{
    const string Json = "{\"ProductCalcKey\":\"xxx\",\"PaperType\":\"1\",\"Quantity\":\"3.500\"}";
    var o = (UnitPrice)JsonConvert.DeserializeObject(Json, typeof(UnitPrice), new FormatConverter());
    Assert.AreEqual(3500, o.Quantity);
}
于 2013-06-19T20:19:31.280 に答える