Json.NET Отключить десериализацию в DateTime
Вот код:
string s = "2012-08-08T01:54:45.3042880+00:00";
JObject j1 = JObject.FromObject(new
{
time=s
});
Object o = j1["time"];
Мы можем проверить, что o - строка и равно "2012-08-08T01: 54: 45.3042880 + 00: 00"
Теперь мы передаем j1.ToString() в другую программу, которая
{
"time": "2012-08-08T01:54:45.3042880+00:00"
}
то в другой программе попробуйте выполнить ее повторную проверку в JObject, который находится
JObject j2 = JObject.Parse(j1.ToString());
Object o2 = j2["time"];
Теперь, если мы проверим o2, тип o2 - Date, o2.ToString() - 8/7/2012 9:54:45 PM.
Мой вопрос:
Есть ли способ отключить десериализацию даты для JObject.Parse и просто получить необработанную строку?
Заранее спасибо
Ответы
Ответ 1
При анализе от object
до JObject
вы можете указать JsonSerializer
, который инструктирует, как обрабатывать даты.
JObject.FromObject(new { time = s },
new JsonSerializer {
DateParseHandling = DateParseHandling.None
});
К сожалению, Parse
не имеет этого параметра, хотя имеет смысл иметь его. Если посмотреть на источник Parse
, мы увидим, что все, что он делает, представляет собой экземпляр a JsonReader
, а затем передает его на Load
. JsonReader
имеет параметры разбора.
Вы можете достичь желаемого результата следующим образом:
JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);
Ответ 2
Вы можете сделать это, используя JsonConvert.DeserializeObject
а также используя JsonSerializerSettings
:
string s = "2012-08-08T01:54:45.3042880+00:00";
string jsonStr = [email protected]"{{""time"":""{s}""}}";
JObject j1 = JsonConvert.DeserializeObject<JObject>(jsonStr, new JsonSerializerSettings {DateParseHandling = DateParseHandling.None});