У меня есть следующий фрагмент кода,
private static string CreateFilter(JProperty property)
{
if (property?.Value == null)
{
return null;
}
switch (property.Value.Type)
{
case JTokenType.Array:
return CreateFilterForArray(property.Name, (JArray)property.Value);
case JTokenType.Object:
return CreateFilterForObject(property.Name, (JObject)property.Value);
case JTokenType.Date:
Console.WriteLine("date");
return null;
case JTokenType.String:
return CreateFilterForString(property.Name, ((JValue)property.Value).Value);
case JTokenType.Integer:
return CreateFilterForInteger(property.Name, ((JValue)property.Value).Value);
default:
throw new NotSupportedException($"No known way to handle json value with type of {property.Value.Type}");
}
}
Когда property.Value
имеет значение {05/22/2019}
, вместо сопоставления с
case JTokenType.Date:
соответствует case JTokenType.String:
Я предполагаю, что это, вероятно, из-за того, что формат, ожидаемый для JTokenType.Date
, отличается от того, что я ему предоставляю.
Какой формат ожидает JTokenType.Date
?.
Есть ли способ сопоставить формат даты, который у меня есть, с JTokenType.Date
?
Попробуйте изменить формат даты на что-то вроде 2019-05-22T00:00:00
и убедитесь, что дата передается в том же формате, то есть date+timeStamp
, иначе она не будет идентифицирована как JToken
.
Связано: newtonsoft.com/json/help/html/DatesInJSON.htm
@dbc Текущее значение, которое я даю, {"Date": "05/21/2019"}
также пробовал {"Date": "2012-03-19T07:22Z"}
(как указано в newtonsoft.com/json/help/html/DatesInJSON.htm). В обоих случаях это не сработало.
Похоже, что "2012-03-19T07:22Z"
должно быть "2012-03-19T07:22:00Z"
(т. е. с включенными секундами), см. dotnetfiddle.net/60FrIJ для демонстрации.
Спасибо за комментарий @dbc, я отправляю дату в "2012-03-19T07:22:00Z"
, и теперь она распознается как JTokenType.Date
Можете ли вы рассказать, как изначально заполнялся
JProperty
, то есть минимальный воспроизводимый пример?property.Value.Type
устанавливается во время анализа иерархииJToken
. (Кстати,JProperty.Value
никогда не бывает нулевым; когда JSON содержит токенnull
, при анализе он становится ненулевымJValue
с типомJTokenType.Null
.)