Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Noda Time的自定义JSON转换器_C#_Json_.net Core_Nodatime - Fatal编程技术网

C# Noda Time的自定义JSON转换器

C# Noda Time的自定义JSON转换器,c#,json,.net-core,nodatime,C#,Json,.net Core,Nodatime,我是为.NETCore开发的,所以我使用的是野田佳彦最新的alpha版本(2.0.0-alpha20160729)。正在使用JSON处理数据 我将接受一个出生日期字段的用户输入,我希望支持多种输入格式,以防用户无法按照指示进行操作。例如,我想接受MM dd yyyy和M/d/yy,等等 委员会具体声明如下: 可以使用从模式轻松创建自定义转换器 但我一辈子都不知道该怎么做。据我所知,我需要实现NodaPatternConverter本身、IPattern进行解析,以及Action进行验证 我开始编

我是为.NETCore开发的,所以我使用的是野田佳彦最新的alpha版本(2.0.0-alpha20160729)。正在使用JSON处理数据

我将接受一个出生日期字段的用户输入,我希望支持多种输入格式,以防用户无法按照指示进行操作。例如,我想接受
MM dd yyyy
M/d/yy
,等等

委员会具体声明如下:

可以使用从模式轻松创建自定义转换器

但我一辈子都不知道该怎么做。据我所知,我需要实现
NodaPatternConverter
本身、
IPattern
进行解析,以及
Action
进行验证

我开始编写
IPattern.Parse
,但该函数返回的显然是无法访问的。它不能被实例化或以我发现的任何方式使用。所以我被卡住了


如何正确地为Noda Time创建自定义JSON转换器?

首先,在JSON转换器中这样做听起来并不正确。如果您直接在JSON中接受用户输入,则应将其视为字符串,稍后再进行解析,IMO.JSON是机器对机器的格式,而不是人对机器的格式。假设这是一个web应用程序,您可能希望使用moment.js在客户端解析数据,并将其重新格式化为ISO-8601。或者,将其反序列化为字符串,然后在服务器端代码中进行转换

无论如何,对于JSON转换器,您只需要实现
IPattern
——不需要实现
NodaPatternConverter
,因为它已经存在。你只需要:

var pattern = ...;
var converter = new NodaPatternConverter<LocalDate>(pattern);
var模式=。。。;
var转换器=新的节点转换器(模式);
现在,要实现您的模式,您可能需要实际使用现有模式创建它—编写一个实现,将一个
IPattern
委托给另一个
ParseResult
,直到结果是成功的
ParseResult
,或者返回最终不成功的
ParseResult
。请注意,
ParseResult
不是不可访问的,但您(当前)无法创建自己的实例。这可能是我应该解决的问题,但在这种情况下,你真的不需要


您需要的代码已经存在,但尚未公开-您需要的是
Parse
部分。要实现
格式
部分,您可以使用第一个模式来格式化值。。。如果需要的话。

首先,在JSON转换器中这样做听起来并不正确。如果您直接在JSON中接受用户输入,则应将其视为字符串,稍后再进行解析,IMO.JSON是机器对机器的格式,而不是人对机器的格式。假设这是一个web应用程序,您可能希望使用moment.js在客户端解析数据,并将其重新格式化为ISO-8601。或者,将其反序列化为字符串,然后在服务器端代码中进行转换

无论如何,对于JSON转换器,您只需要实现
IPattern
——不需要实现
NodaPatternConverter
,因为它已经存在。你只需要:

var pattern = ...;
var converter = new NodaPatternConverter<LocalDate>(pattern);
var模式=。。。;
var转换器=新的节点转换器(模式);
现在,要实现您的模式,您可能需要实际使用现有模式创建它—编写一个实现,将一个
IPattern
委托给另一个
ParseResult
,直到结果是成功的
ParseResult
,或者返回最终不成功的
ParseResult
。请注意,
ParseResult
不是不可访问的,但您(当前)无法创建自己的实例。这可能是我应该解决的问题,但在这种情况下,你真的不需要


您需要的代码已经存在,但尚未公开-您需要的是
Parse
部分。要实现
格式
部分,您可以使用第一个模式来格式化值。。。如果需要的话。

啊,好的,我会测试一下,然后再报告。我认为如果成功的话,转换器将是处理验证和转换的最佳场所,而不是在我的模型上同时使用字符串和
LocalDate
,然后用前者填充后者。(这对于Json.net来说也很糟糕,试图用一个进行序列化,另一个进行反序列化。但我离题了。)啊,好吧,我会测试一下,然后再报告。我认为如果成功的话,转换器将是处理验证和转换的最佳场所,而不是在我的模型上同时使用字符串和
LocalDate
,然后用前者填充后者。(这对于Json.net来说也是一团糟,试图用一个进行序列化,另一个进行反序列化。但我离题了。)