Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# JToken:获取原始/原始JSON值_C#_.net_Json_Json.net - Fatal编程技术网

C# JToken:获取原始/原始JSON值

C# JToken:获取原始/原始JSON值,c#,.net,json,json.net,C#,.net,Json,Json.net,有没有办法从JToken获取原始/原始JSON值 问题是: var data = JObject.Parse(@"{ ""SimpleDate"":""2012-05-18T00:00:00Z"", ""PatternDate"":""2012-11-07T00:00:00Z"" }"); var value = data["SimpleDate"].Value<string>(); var data=JObject.Parse(@){ “SimpleDate”:

有没有办法从
JToken
获取原始/原始JSON值

问题是:

var data = JObject.Parse(@"{
    ""SimpleDate"":""2012-05-18T00:00:00Z"",
    ""PatternDate"":""2012-11-07T00:00:00Z""
}");

var value = data["SimpleDate"].Value<string>();
var data=JObject.Parse(@){
“SimpleDate”:“2012-05-18T00:00:00Z”,
“模式日期”:“2012-11-07T00:00:00Z”
}");
var值=数据[“SimpleDate”].value();
值现在是
05/18/2012 00:00:00
,但我需要原始字符串
2012-05-18T00:00:00Z

有没有办法得到这个原始值?此外,我无法更改创建
JObject
的方式(例如更改设置),因为它是作为参数传递到我的类中的


(参考:)

您无法获取原始字符串,日期字符串将被识别并转换为自身内部的
DateTime
结构。如果执行以下操作,您可以看到:

Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime
但是,您可以通过执行以下操作以格式提取日期:

var value = JsonConvert.SerializeObject(data["SimpleDate"]);
// value is "2012-05-18T00:00:00Z"
这将始终以JSON适当的字符串格式输出
JValue
。由于您的原始日期采用此格式,因此这可能满足您的需要

(老实说,我很惊讶以非ISO格式输出日期,因为这样的输出包含ISO格式的日期。)

如果您能够在读取
JObject
时更改设置,则可以使用禁用
DateTime
识别:

var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
var data = JsonConvert.DeserializeObject<JObject>(@"{
    ""SimpleDate"":""2012-05-18T00:00:00Z"",
    ""PatternDate"":""2012-11-07T00:00:00Z""
}", settings);

var value = data["SimpleDate"].Value<string>();

Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z
var settings=newjsonserializersettings{DateParseHandling=DateParseHandling.None};
var data=JsonConvert.DeserializeObject(@){
“SimpleDate”:“2012-05-18T00:00:00Z”,
“模式日期”:“2012-11-07T00:00:00Z”
}“,设置);
var值=数据[“SimpleDate”].value();
Debug.WriteLine(值);//输出2012-05-18T00:00:00Z
没有需要
JsonSerializerSettings
的重载,因此请使用。此设置最终会传播到

相关Newtonsoft文档:


您无法获取原始字符串,日期字符串被识别并转换为自身内部的
DateTime
结构。如果执行以下操作,您可以看到:

Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime
但是,您可以通过执行以下操作以格式提取日期:

var value = JsonConvert.SerializeObject(data["SimpleDate"]);
// value is "2012-05-18T00:00:00Z"
这将始终以JSON适当的字符串格式输出
JValue
。由于您的原始日期采用此格式,因此这可能满足您的需要

(老实说,我很惊讶以非ISO格式输出日期,因为这样的输出包含ISO格式的日期。)

如果您能够在读取
JObject
时更改设置,则可以使用禁用
DateTime
识别:

var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
var data = JsonConvert.DeserializeObject<JObject>(@"{
    ""SimpleDate"":""2012-05-18T00:00:00Z"",
    ""PatternDate"":""2012-11-07T00:00:00Z""
}", settings);

var value = data["SimpleDate"].Value<string>();

Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z
var settings=newjsonserializersettings{DateParseHandling=DateParseHandling.None};
var data=JsonConvert.DeserializeObject(@){
“SimpleDate”:“2012-05-18T00:00:00Z”,
“模式日期”:“2012-11-07T00:00:00Z”
}“,设置);
var值=数据[“SimpleDate”].value();
Debug.WriteLine(值);//输出2012-05-18T00:00:00Z
没有需要
JsonSerializerSettings
的重载,因此请使用。此设置最终会传播到

相关Newtonsoft文档:


另一种方法——有效的方法——Regex

SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z)
它是一个正则表达式模式,用于提取您要查找的数据—您只需要字符串,所以它就在这里。 这不是JSON解析方法,但它确实提取字符串


另一种可行的方法-Regex

SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z)
它是一个正则表达式模式,用于提取您要查找的数据—您只需要字符串,所以它就在这里。 这不是JSON解析方法,但它确实提取字符串


我发现了一个解决方案:


我发现了一个解决方案:


这很糟糕:我正在开发一个JSON模式验证器,它接受一个JObject,并可能使用正则表达式模式验证这样的日期字符串。当值转换为日期时间时,这不再匹配…这里可能有点问题?您能否利用Json.NET已经在您的验证器中识别并解析了日期这一事实?毕竟JSON中没有日期的标准,请参阅。似乎唯一的选择是在创建JObject时禁用日期解析。。。这里是原始问题:它不是一个xy问题:-),我试图实现一个JSON模式验证器,它接受一个JObject。JSON模式可能对属性要求的不仅仅是日期-时间格式,而且可能会因为这种自动转换而失败…@ricoster-在这种情况下,我还原了我原始答案的一部分,以防有用。这很糟糕:我正在使用JSON模式验证程序,它接受一个JObject,并可以使用正则表达式模式验证这样的日期字符串。当值转换为日期时间时,这不再匹配…这里可能有点问题?您能否利用Json.NET已经在您的验证器中识别并解析了日期这一事实?毕竟JSON中没有日期的标准,请参阅。似乎唯一的选择是在创建JObject时禁用日期解析。。。这里是原始问题:它不是一个xy问题:-),我试图实现一个JSON模式验证器,它接受一个JObject。JSON模式可能对属性要求的不仅仅是日期时间格式,而且可能会因为这种自动转换而失败…@ricoster-在这种情况下,我还原了我原始答案的一部分,以防有用。这是一个答案-问题是提取“字符串”不是如何微调Json解析这是一个答案-问题是提取“字符串”而不是如何微调Json解析我在尝试解析扩展日期时间格式(包含millesconds)时遇到了类似的问题。为了让原来的问题更清楚:如果我有一个自由文本字段,比如一条评论,而用户输入了类似ISO日期时间的内容,该怎么办?不可能按原样解析这个字符串吗?我在尝试解析扩展的日期时间格式(包含millesconds)时遇到了类似的问题。为了让原来的问题更清楚:如果我有一个类似于评论的自由文本字段,而用户输入了looki怎么办