我想反序列化JSON String
{\"entityType\":\"Phone\",\"countValue\":30,\"lastUpdateDate\":\"3/25/14 12:00:00 PM MST\",\"RowCnt\":30}.
但我得到了
JSONReaderException "Could not convert string to DateTime: 3/25/14 12:00:00 PM MST".
注意:我们使用Newtonsoft.JSON
进行序列化/反序列化。
答案 0 :(得分:1)
这实际上比建议的重复项稍微复杂一些。 Here's a related question处理解析包含时区缩写的字符串。
要在JSON.NET中使用该答案中的信息,最好使用自定义转换器:
public class DateTimeWithTimezoneConverter : JsonConverter
{
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
string t = serializer.Deserialize<string>(reader);
t = t.Replace("MST", "-07:00");
// Do other replacements that you need here.
return
DateTime.ParseExact(t, @"M/dd/yy h:mm:ss tt zzz", CultureInfo.CurrentCulture);
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type t)
{
return typeof(DateTime).IsAssignableFrom(t);
}
}
请注意,这仅处理您在问题中提供的特定情况。如果您需要更多时区的支持,请检查链接的答案。如果您可以控制生成字符串的代码,则可能需要使用偏移量而不是时区缩写。
以下是您如何使用它的示例:
public class MyType
{
public string EntityType { get; set; }
public int CountValue { get; set; }
public DateTime LastUpdateDate { get; set; }
public int RowCnt { get; set; }
}
string json = "{\"entityType\":\"Phone\",\"countValue\":30,\"lastUpdateDate\":\"3/25/14 12:00:00 PM MST\",\"RowCnt\":30}";
MyType obj = JsonConvert.DeserializeObject<MyType>(
json,
new DateTimeWithTimezoneConverter());