Сериализатору ServiceStack Jsv не удалось десериализовать словарь<DateTime, ___>

Я использую OrmLite, и одна из моих сущностей имеет свойство типа Dictionary of DateTime и int, и оно не может десериализовать это свойство. Я узнал, что это проблема сериализатора Jsv. У меня не пройден тест:

[Test]
public void Can_serialize_and_deserialize_Dictionary_with_DateTime_key()
{
    JsConfig.DateHandler = JsonDateHandler.TimestampOffset;
    var expected = new Dictionary<DateTime, int> {{DateTime.Now, 5}};
    var serializedString = TypeSerializer.SerializeToString(expected);
    var actual = TypeSerializer.DeserializeFromString<Dictionary<DateTime, int>>(serializedString);
    Assert.AreEqual(actual.Keys.First().Year, expected.Keys.First().Year);
}

Кто-нибудь может подсказать, как это можно исправить? Это похоже на проблему формата JSV в целом, а не на ошибку реализации. (но я могу ошибаться)

1 ответ

Как обходной путь до этой проблемы будет исправлен в servicestack.text, я назначил свои собственные функции сериализации для DateTime и DateTime?

JsConfig<DateTime>.SerializeFn = DateTimeSerializer.ToShortestXsdDateTimeString;
JsConfig<DateTime?>.SerializeFn = time => time.HasValue ? DateTimeSerializer.ToShortestXsdDateTimeString(time.Value) : null;

Это те же самые функции, которые используются внутри servicestack.text, но при назначении вашей собственной библиотеки функций проверит, нужно ли экранировать ваши значения или нет.

Другие вопросы по тегам