1

たとえば、私はこのようなコードを書きます

        bool hasCustomer = true;

        JObject j = JObject.FromObject(new
        {
            customer = hasCustomer? new
            {
                name = "mike",
                age = 48
            }:null
        });


        JObject c = (JObject)j["customer"];
        if (c != null)
            string name = (string) c["name"];

これはうまくいきます。

しかし、hasCustomer = false; を設定すると、

       JObject c = (JObject)j["customer"];

System.InValidCastException をスローします。

       Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'.

JObjectはnull可能であるため、JObject cにnullを割り当てるだけでよいと思っていました。

では、このようなものを処理する最善の方法は何ですか?

4

2 に答える 2

4

null を無視すると、正しい動作が生成されているようです。

    bool hasCustomer = false ;

    JsonSerializer s = new JsonSerializer() {
        NullValueHandling = NullValueHandling.Ignore
    };
    JObject j = JObject.FromObject( new {
        customer = hasCustomer ? new {
            name = "mike" ,
            age = 48
        } : null
    }, s );


    JObject c = (JObject)j[ "customer" ];
于 2012-08-16T17:21:18.503 に答える
-1

JObject は null 可能ですが、これは JObject が null をキャストできるという意味ではありません。これを試すことができます:

JObject j = JObject.FromObject(new
        {
            customer = hasCustomer? new
            {
                name = "mike",
                age = 48
            }:new Object()
        });
于 2012-08-16T17:12:15.483 に答える