2014-07-21T21:47:13.032415435Z
将此值反序列化为DateTime字段会出现以下错误:
{System.FormatException:字符串未被识别为有效的DateTime。 at System.DateTime.Parse(System.String s,IFormatProvider provider,DateTimeStyles styles)[0x00027] in /Volumes/build-root-ramdisk/mono-3.8.0/mcs/class/corlib/System/DateTime.cs:845 在Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader reader,System.Type objectType,System.Object existingValue,Newtonsoft.Json.JsonSerializer serializer)[0x00000] in:0 在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(Newtonsoft.Json.JsonConverter转换器,Newtonsoft.Json.JsonReader reader,System.Type objectType,System.Object existingValue)[0x00000] in:0 ...
以下是一些代码示例:
namespace DemoClient
{
[DataContractAttribute]
public class DemoType
{
[DataMember(Name = "Created")]
public DateTime Created;
public DemoType ()
{
}
}
class MainClass
{
public static void Main (string[] args)
{
var demoType = JsonConvert.DeserializeObject<DemoType> (
"{\"Created\":\"2014-08-25T01:20:23.60191161Z\"}", new[]{new IsoDateTimeConverter()});
}
}
我在使用Mono 3.8.0 for Mac。
答案 0 :(得分:1)
我正好在一个项目上工作,我正在使用JSON.Net。我使用您提供的字符串示例组合了一个单元测试。它没有错误地转换:
public void ProcessDataItemTest()
{
string value = "{\"date\":\"2014-07-21T21:47:13.032415435Z\"}";
try
{
var x = JsonConvert.DeserializeObject<DateTest>(value);
var d = x.date;
Console.WriteLine(d.ToString()); //output: 7/21/2014 9:47:13 PM
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
internal class DateTest
{
public DateTime date { get; set; }
}
答案 1 :(得分:0)
这是一个单声道的bug,而不是json.net
我在尝试解析Docker api响应时遇到了同样的错误(相同的变量名为Created,iso日期字符串中的小数长度相同)
一切都在微软框架上工作,而不是单声道,我相信因为单声道解析函数只能解析最多7位小数的iso日期字符串。无论如何,错误已经修复(参见this commit),而DateTime.Parse正在处理最新的单声道(3.10.1)