如何将JsonObject实例转换/反序列化为具体类?

时间:2012-08-06 06:25:06

标签: servicestack

我关注DTO

public class Foo
{
    public ServiceStack.Text.JsonObject Bar { get; set; }
}

Foo.Bar可以是其他3个DTO中的一个

在我的代码中的某个地方,我想将Foo.Bar映射/转换/反序列化为具体的DTO(我知道ServiceStack.Text.JsonObject实现了System.Collection.Generic.Dictionary<string, string> - 有趣的是值,这些值是作为非传输的string,进入我的ServiceStack.Text.JsonObject - 实例作为字符串)。

所以我试过了

ServiceStack.Text.JsonExtensions.JsonTo<ConcreteDTO>(foo.Bar, ???)

但它需要一个键选择器作为第二个参数 - 但我不想转换单个值,而是我会选择整个实例。

我也知道有ServiceStack.Text.JsonExtensions.ConvertTo<T>(JsonObject jsonObject, Func<JsonObject, T> convertFn),但我不想转换手工编码的jsonObject。

那么,我该如何解决这个问题?

编辑:
只是要清楚 - 我不想绕道而且将JsonObject - 实例序列化为json-string只是为了反序列化它...来自JsonObject是否有任何直接反序列化选项?

1 个答案:

答案 0 :(得分:1)

所以...我最终得到了什么:

DTO concreteDTO;
var jsonString = JsonSerializer.SerializeToString(foo.Bar);
switch (foo.ConcreteObjectType)
{
    case ObjectType.Foo1:
        concreteDTO = jsonString.FromJson<DTO1>();
        break;
    case ObjectType.Foo2:
        concreteDTO = jsonString.FromJson<DTO2>();
        break;
    case ObjectType.Foo3:
        concreteDTO = jsonString.FromJson<DTO3>();
        break;
}