создать строку JSON DateTime с .NET - PullRequest
4 голосов
/ 04 декабря 2009

По странной причине, которая не имеет значения для этого вопроса, мне нужно создать JSON-совместимую подстроку, которая представляет DateTime и которая будет вручную вставлена ​​в большую строку JSON, которая позже будет проанализирована в .NET DataContractJsonSerializer. Я придумал следующий метод:

static readonly DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(DateTime));
private static string ToJsonString(DateTime time)
{
 using (var memStream = new MemoryStream())
 {
  s.WriteObject(memStream, time);
  return Encoding.UTF8.GetString(memStream.ToArray());
 }
}

Есть ли более простой способ сделать это или код, приведенный выше, может быть оптимизирован каким-либо образом? Или есть даже ошибка в коде выше?

Также было бы очень здорово, если бы я мог сделать это без использования DataContractJsonSerializer, поскольку построение строк также будет выполняться в чистом процессе .NET 1.1.

Ответы [ 2 ]

1 голос
/ 05 декабря 2009

Я бы использовал NewtonSoft JSON и делегировал бы ответственность за сериализацию DateTime этому. Он поддерживает сериализацию DateTime в формат ISO 8601 (2008-04-12T12: 53Z и т. Д.) И гораздо более надежен, чем DataContractJsonSerializer.

Вы можете использовать его для сериализации собственных объектов или использовать его как средство записи текста для генерации JSON вручную. Поверить в это проще, чем писать строки.

http://www.codeplex.com/Json

В качестве альтернативы, вы можете заключить это в логику ToString.

1 голос
/ 04 декабря 2009

Не могли бы вы использовать подход времени миллисекунд от эпохи? Как этот метод расширения?

 public static class DateTimeExtensions
    {
        private static readonly DateTime Epoch = new DateTime(1970, 1, 1);

        public static string ToJson(this DateTime time)
        {
            return string.Format("\\/{0:0}\\/", (time - Epoch).TotalMilliseconds);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...