2

我正在使用 OrmLite,我的一个实体具有 DateTime 和 int 类型的 Dictionary 属性,但它无法反序列化该属性。我发现这是 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 格式问题,而不是实现错误。(但我可能错了)

4

1 回答 1

2

作为此问题之前的解决方法将在 servicestack.text 中修复,我为 DateTime 和 DateTime 分配了我自己的序列化函数?

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

这些与 servicestack.text 中使用的函数相同,但是当您分配自己的函数库时,将检查您的值是否需要转义。

于 2013-11-20T12:35:09.293 回答