Сериализатору 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, но при назначении вашей собственной библиотеки функций проверит, нужно ли экранировать ваши значения или нет.