4

我们有这个代码:

// using ServiceStack JSONSerializer
string typeInfoString = JsonSerializer.SerializeToString<Type>(typeof(HashSet<string>));
// yields "System.Collections.Generic.HashSet`1[[System.String, mscorlib]], System.Core"

// this string is the same thing, so it's probably valid json
string jsonTypeInfo = typeof(HashSet<string>).ToJson();

// this should work, I feel like
Type desType = JsonSerializer.DeserializeFromString<Type>(jsonTypeInfo);
// but desType ends up being null :(

关于 HashSet 类型是否有一些 ServiceStack 陷阱?

4

2 回答 2

3

虽然这不是最好的答案,但您可以通过创建一个从 HashSet 继承的本地类来解决这个问题。

例子:

public class HashSetHack<T> : HashSet<T> { }

然后参考 HashSetHack 而不是 HashSet,它似乎可以工作。

于 2013-07-24T18:59:48.990 回答
2

这似乎是 ServiceStack.Text 中的一个错误。我已将问题追溯到 AssemblyTypeDefinition.cs 第 17 行(在撰写本文时)。传入的 typeDefinition 是 "System.Collections.Generic.HashSet`1[[System.String, mscorlib]], System.Core" 并且 TypeDefinitionSeperator 是 ',' 导致字符串在 ',' 的第一个实例中被破坏第二,它应该在哪里。模拟正确拆分的字符串(在调试器中)从您的代码中返回正确的结果。

您可能希望将此作为错误提交给 ServiceStack 社区。

于 2013-07-24T18:53:49.183 回答