Serialization 不管JsonSerializer设置如何,信号器未序列化节点时间类型

Serialization 不管JsonSerializer设置如何,信号器未序列化节点时间类型,serialization,json.net,signalr,nodatime,Serialization,Json.net,Signalr,Nodatime,我遇到了节点时间类型和信号器参数的序列化问题(异常),例如 Error converting value to type 'NodaTime.ZonedDateTime Error converting value \"2016-06-01T18:33:36.7279685+01 Europe/London\" to type 'NodaTime.ZonedDateTime'. Path '[0].DateCreated', line 1, position 79. 尽管遵循并替换了默认的J

我遇到了节点时间类型和信号器参数的序列化问题(异常),例如

Error converting value to type 'NodaTime.ZonedDateTime

Error converting value \"2016-06-01T18:33:36.7279685+01 Europe/London\" to type 'NodaTime.ZonedDateTime'. Path '[0].DateCreated', line 1, position 79.
尽管遵循并替换了默认的JsonSerializer,并使用了NodeTime扩展方法和JSON.net nuget包,例如

JsonSerializerSettings js=new-JsonSerializerSettings();
js.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var serializer=JsonSerializer.Create(js);
GlobalHost.dependencyrolver.Register(typeof(JsonSerializer),()=>序列化器);

幸亏有了

本质上,它为信号器参数使用客户解析程序,该参数使用正确的序列化程序,而不是创建默认值

也参考了,但当然只发现once已经开始发布我自己的问题;)

在这里为其他人重新发布谷歌搜索(优秀的),并分享我需要的一些其他序列化修复,例如:

Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property X with type Y Path Z
服务器启动

public void配置(IAppBuilder应用程序)
{
JsonSerializerSettings js=新的JsonSerializerSettings();
js.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
js.DateParseHandling=DateParseHandling.None;
js.ReferenceLoopHandling=ReferenceLoopHandling.Serialize;
js.PreserveReferencesHandling=PreserveReferencesHandling.Objects;
var serializer=JsonSerializer.Create(js);
GlobalHost.dependencyrolver.Register(typeof(JsonSerializer),()=>序列化器);
var解析器=新的解析器(序列化器);
GlobalHost.DependencyResolver.Register(typeof(iprameterResolver),()=>resolver);
}
自定义参数解析器

公共类解析器:DefaultParameterResolver
{
私有只读JsonSerializer\u序列化程序;
公共解析器(JsonSerializer序列化程序)
{
_序列化程序=序列化程序;
}
私有字段信息(valueField);;
公共重写对象ResolveParameter(ParameterDescriptor描述符,Microsoft.AspNet.signal.Json.IJsonValue)
{
if(value.GetType()==描述符.ParameterType)
{
返回值;
}
如果(_valueField==null)
_valueField=value.GetType().GetField(“_值”,BindingFlags.Instance | BindingFlags.NonPublic);
var json=(字符串)\ u valueField.GetValue(值);
使用(var reader=newstringreader(json))
return _serializer.Deserialize(reader,descriptor.ParameterType);
}
}
非常感谢布兰农