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

Использование Json для сериализации/десериализации TimeSpan

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

{"PassedTimeSpan":"P1DT2H3M4S"}

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

Так выглядит формат:

[-] Р [{} дней D], [Т [{ч} Н] [{мин} M], [{сек} S]]

Где:

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

Ответ 3

Эти ответы устарели, поэтому я подумал, что дам обновленный лучший ответ. 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

Ответ 4

Если вы применяете точный формат, вы можете использовать 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.

Ответ 5

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;
}