Использование Json для сериализации / десериализации TimeSpan - PullRequest
10 голосов
/ 13 июля 2010

Я пытаюсь десериализовать / сериализовать временной интервал,

, но когда отправляется json, он установлен на 00:00:00, это вообще возможно сделать?

Спасибо!-Kevin

Кстати, язык C #, с использованием Visual Studio 2008.

Ответы [ 5 ]

9 голосов
/ 28 апреля 2015

Я попробовал метод # Jessycormier, и он не работал для меня.Я запустил DataContractJsonSerializer, чтобы посмотреть, что он сгенерирует, и обнаружил, что это дает мне значение, которое больше похоже на это.

{"PassedTimeSpan":"P1DT2H3M4S"}

Показанное выше значение было для 1 дня, 2 часов, 3 минут и 4 секунд.

Таким образом, формат выглядит следующим образом:

[-] P [{days} D] [T [{hours} H] [{min} M] [{sec} S]]

Где:

- указывает отрицательный интервал времени, пропущенный для положительных значений
P должен быть первым символом (если не указано отрицательное значение времени)
T должен предшествовать временной части временного интервала.
[] = необязательная часть, которая может быть пропущена, если 0.

5 голосов
/ 13 июля 2010

Я понял это, очевидно, это недостаток дизайна MS ...

Поскольку TimeSpan не может быть объектом без параметров.XML не может воссоздать его.

Взгляните на этот сайт.http://forums.silverlight.net/forums/p/51793/135450.aspx

Итак.Поэтому TimeSpan не может быть преобразован.Простой способ сделать это - изменить временной интервал на строку, а затем отправить строку заново.и использовать TimeSpan.TryParse (String);

4 голосов
/ 15 марта 2017

Все эти ответы устарели, поэтому я подумал, что смогу предоставить обновленный лучший ответ. moment.js теперь напрямую поддерживает формат сериализации .NET Timespan.

Начиная с версии 2.1.0 это поддерживается:

moment.duration('23:59:59');
moment.duration('23:59:59.999');
moment.duration('7.23:59:59.999');
moment.duration('23:59'); // added in 2.3.0
2 голосов
/ 22 мая 2013

Если вы применяете точный формат, вы можете использовать TimeSpan. Формат: «0,00: 00: 00,0000»

Установка TimeSpan на 30 минут

var jsonData = JSON.stringify({
    myDataObject: {
         TimeSpanValue : "0.00:" + $("#InputWithMinVal").val() + ":00.0"
    }
});

Это решение работает для меня. Я использую MVC 4.0 с .Net Framework 4.0.

0 голосов
/ 13 июля 2010
http://msdn.microsoft.com/en-us/library/bb412179.aspx

The JSON serializer throws a serialization exception for data contracts that have multiple members with the same name, as shown in the following sample code.

Copy

[DataContract]
public class TestDuplicateDataBase
{
    [DataMember]
    public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
    [DataMember]
    public new int field1 = 999;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...