gpt4 book ai didi

c# - 使用 JSON.NET 实现自定义日期时间转换器

转载 作者:太空狗 更新时间:2023-10-29 22:16:00 25 4
gpt4 key购买 nike

我在使用日期时间转换器时无法解析以下 JSON。我知道“-”和“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\"}]"

我的模型是:

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

我已尝试如下所示对其进行反序列化,甚至通过删除日期时间字符串中的“at”,但我仍然收到来自 JSON.NET 的“字符串格式不正确”异常。我很难找到其他解决方法。任何帮助将不胜感激!

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

尝试在 ReadJson 上调试它并在那里解析日期 - 现在应该更容易了。

关于c# - 使用 JSON.NET 实现自定义日期时间转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27928338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com