简体   繁体   English

使用JSON.NET实现自定义DateTime转换器

[英]Implement Custom DateTime Converter with JSON.NET

I'm having troubles parsing the below JSON when using a Date Time converter. 使用Date Time转换器时,我遇到了解析下面JSON的麻烦。 I understand the "-" and "at" cause problems, but this is the JSON I have in a response and do not have control over it. 我理解“ - ”和“at”导致问题,但这是我在响应中的JSON,并且无法控制它。

"[{\"Desc\":\"Unacceptable Signal\",\"Station\":\"Test\",\"When\":\"Tuesday - 5/18/10 at 3:34 PM\"},{\"Desc\":\"Low Battery\",\"Station\":\"Test Unit (21261)\",\"When\":\"Wednesday - 3/30/11 at 12:34 AM\"}]"

My Model is: 我的模型是:

public class CurrentAlarms
    {
        public string Desc { get; set; }
        public string Station { get; set; }
        public DateTime When { get; set; }

        public CurrentAlarms() { }

        public CurrentAlarms(string desc, string station, DateTime when)
        {
            Desc = desc;
            Station = station;
            When = when;
        }
    }

I have tried deserializing it as shown below, even by removing the "at" in the Date Time string, but I still get a "string is not in the correct format" exception from JSON.NET. 我已尝试反序列化它,如下所示,即使删除日期时间字符串中的“at”,但我仍然从JSON.NET获得“字符串格式不正确”异常。 I am having a hard time figuring out other ways of resolving. 我很难找到其他解决方法。 Any help would be appreciated! 任何帮助,将不胜感激!

json = json.Replace(" at ", " ");

var format = "dddd MM/dd/yy h:mm tt";
var dateTimeConverter = new IsoDateTimeConverter {DateTimeFormat = format};

var result = JsonConvert.DeserializeObject<ObservableCollection<CurrentAlarms>>(json, dateTimeConverter);
public class CurrentAlarms
{
    public string Desc { get; set; }
    public string Station { get; set; }
    [JsonConverter(typeof(InvalidDataFormatJsonConverter))]
    public DateTime When { get; set; }

    public CurrentAlarms() { }

    public CurrentAlarms(string desc, string station, DateTime when)
    {
        Desc = desc;
        Station = station;
        When = when;
    }
}

class InvalidDataFormatJsonConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // implement in case you're serializing it back
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
        JsonSerializer serializer)
    {
        var dataString = (string) reader.Value;
        DateTime date = parseDataString;             

        return date;
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }
}

Try debug it at ReadJson and parse date there - it should be easier now. 尝试在ReadJson上调试它并在那里解析日期 - 它现在应该更容易。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM