Подтвердить что ты не робот

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 и просто получить необработанную строку?

Заранее спасибо

4b9b3361

Ответ 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});