我正在使用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格式问题一般而不是实现bug。 (但我可能错了)
答案 0 :(得分:2)
在此问题之前的解决方法将在servicestack.text中修复,我为DateTime和DateTime分配了自己的序列化函数?
JsConfig<DateTime>.SerializeFn = DateTimeSerializer.ToShortestXsdDateTimeString;
JsConfig<DateTime?>.SerializeFn = time => time.HasValue ? DateTimeSerializer.ToShortestXsdDateTimeString(time.Value) : null;
这些是在servicestack.text中使用的相同函数,但是当您分配自己的函数库时,将检查您的值是否需要转义。