型指定されていない動的ペイロードの場合は、ServiceStack.CommonのJSON Utilsを使用することをお勧めします。これにより、動的ペイロードを解析しながら、その型を保持できます。例:
var obj = JSON.parse(json);
if (obj is new Dictionary<string, object> jsonObj)
{
int b = (int)jsonObj["b"];
bool c = (bool)jsonObj["c"];
}
ServiceStack.Text JSONシリアライザーでは、プリミティブ値の型について型情報が出力されないことが意図的な設計上の決定であるため、値は文字列として残されます。
型情報を保持する強い型付きPOCOに逆シリアル化する必要があります。
public class MixType
{
public string a { get; set; }
public int b { get; set; }
public bool c{ get; set; }
}
var mixedMap = new Dictionary<string, object> {
{ "a", "text" },
{ "b", 32 },
{ "c", false },
};
var json = JsonSerializer.SerializeToString(mixedMap);
Console.WriteLine("JSON:\n" + json);
var mixedType = json.FromJson<MixType>();
Assert.AreEqual("text", mixedType.a);
Assert.AreEqual(32, mixedType.b);
Assert.AreEqual(false, mixedType.c);
または、にデシリアライズして、Dictionary<string,string>
自分で特定のタイプに解析します。
または、ServiceStackの動的APIを使用して逆シリアル化します。これを行う方法の例については、ServiceStackのDynamicJSONTestフォルダーを参照してください。