2

私はDTOをフォローしています

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

Foo.Bar他の3つのDTOのうちの1つにすることができます

私のコードのどこかで、Foo.Bar具体的なDTOにマップ/変換/逆シリアル化したいと思います(ServiceStack.Text.JsonObject興味深いことにSystem.Collection.Generic.Dictionary<string, string>、非文字列として送信された値は、文字列ServiceStack.Text.JsonObjectとして私のインスタンスに入ります)。

だから私は試しました

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

ただし、2番目のパラメーターとしてキーセレクターが必要です。ただし、単一の値を変換するのではなく、インスタンス全体を使用します。

があることも知っていますがServiceStack.Text.JsonExtensions.ConvertTo<T>(JsonObject jsonObject, Func<JsonObject, T> convertFn)、ハンドコードされたjsonObjectを変換したくありません。

では、どうすればこれを解決できますか?

EDIT:
Just to be clear - I do not want to go the detour and serialize the JsonObject-instance to a json-string just to deserialize it ... Is there any direct deserialization option from JsonObject?

4

1 に答える 1

1

So ... what I ended up with:

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;
}
于 2012-08-20T06:45:00.213 に答える