ServiceStack Jsv序列化程序无法反序列化Dictionary <datetime,___ =“”> </datetime,>

时间:2013-11-19 18:30:17

标签: c# servicestack ormlite-servicestack servicestack-text

我正在使用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。 (但我可能错了)

1 个答案:

答案 0 :(得分:2)

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

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

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