当转换器属性丢失时,反序列化失败

时间:2017-01-17 20:55:37

标签: c# json.net restsharp

我正在使用restsharp 105.2.3并且我有一个模型类的属性(CalcDate)绑定到DateTime类型,但我使用转换器来解析传入的rest响应以构建时间戳。这很有效,除非svc没有返回“calcDate”;当它丢失时,模型无法反序列化。我从 IRestResponse.ErrorMessage 获得的错误是:

  

“要添加的值超出范围。\ r \ nParameter name:value”

有趣的是,如果我使用原始json(缺少calcDate)并尝试使用jsonConvert构建它,那么它按预期工作,模型使用nulled calcDate构建。

> Newtonsoft.Json.JsonConvert.DeserializeObject<MyModel>(json) // works

代码:

public class MyModel {

        [JsonProperty("id")]
        public int Id { get; set; }

        [JsonConverter(typeof(TimestampConverter))]
        [JsonProperty("calcDate")]
        public DateTime? CalcDate { get; set; }
}

public class TimestampConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return true;
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jvalue = JValue.Load(reader);
            if (jvalue.Type == JTokenType.String)
            {
                long val = 0;
                if (long.TryParse(jvalue.ToString(), out val)) {
                    DateTimeOffset dto = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(val));

                    return dto.DateTime;
                }
            }

            return DateTime.MinValue;
        }

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

问题:如何使用jsonConvert重新编译json?#/ p>

0 个答案:

没有答案