質問

json.netを使用して辞書の辞書をシリアル化していましたが、辞書またはブレアを辞書に追加したとき、辞任したときに整数とブーリアンを取り戻しました。今、私はコードを変更してServiceStack.Textを使用しようとしていました。代わりに、日付のシリアル化に関するコードの他の部分の問題のために、今では脱皮化後の文字列としてブーチャーを整数にします。 json.netと同じ動作をする方法はありますか?

これがそれを再現するためのコードです: https://gist.github.com/1608951test_jsonnetは合格しますが、test_servicestack_text_tepserializerとtest_servicestack_text_jsonserializerの両方が失敗します

役に立ちましたか?

解決

これは、プリミティブ値タイプのタイプ情報が放出されないという意図的な設計決定であり、そのため、値は文字列として残されています。

あなたは、タイプ情報を保持する強力なタイプされたポコにゆるくする必要があります:

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);

またはaに脱皮します Dictionary<string,string> そして、自分で特定のタイプに解析します。

または、ServiceStackの動的APIを使用してDeserializeを使用します。見る ServiceStackの動的JSONテストフォルダー これを行う方法の例については。

他のヒント

これを行うことができます:

JsConfig.TryToParsePrimitiveTypeValues = true;

これにより、JSON Deserialiserはタイプがどうあるべきかを判断しようとし、整数として整数を取り戻したり、ブール人としてブーチャンとして戻したりします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top