以下のコード行では、string x
値の場合、私のclInitializer.AVOptions = null
は実際には「null」の文字列になります。
string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
実際のWordの場合と同様に、「null」であり、null
値または{}
ではありません。これが予想される動作かどうかはわかりません。 「null」という単語を返さないようにする方法を知っている人はいますか、またはJsonConvert
の仕組みについて基本的な誤解を持っていますか。前もって感謝します。
NullValueHandling
は、それ自体のオブジェクトではなく、プロパティのnull値に関係しています。
たとえば、次の例があるとします。
public class ExampleClass
{
public string NullProperty { get; set; }
}
そして、あなたはそれをシリアライズします:
var obj = new ExampleClass();
var jsons = JsonConvert.SerializeObject(obj, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
その後、NullProperty
は無視され、{}
。
編集済み
「null」が返される理由は、JSONのRFC( https://tools.ietf.org/html/rfc7159 )が明示的に次のように述べているためです。
JSON値は、オブジェクト、配列、数値、文字列、または
次の3つのリテラル名:false null true
リテラル名は小文字でなければなりません。他のリテラル名はありません
許可されています。値= false/null/true /オブジェクト/配列/数値/文字列
false =%x66.61.6c.73.65;偽
null =%x6e.75.6c.6c;ヌル
true =%x74.72.75.65;本当
編集:
元々回避策がありましたが、RFCに従うべきだと本当に思ったので削除しました。 RFCは、NULLオブジェクトは「null」で表される必要があることを明確に述べているため、回避策を講じるのは良い考えではありません。
RFCを維持するには、「null」を格納するか、「null」ではなくNULLを返します。 「null」を逆シリアル化すると、NULL値が返されます。
〜乾杯
Nullの値は常にnull文字列を返します。
JsonConvert.SerializeObject(null, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
文字列null
を返します。
Null clInitializer
を持つオブジェクトAVOptions
を渡した場合、JsonSerializerSettings
を使用すると、プロパティAVOptions
が無視され、ストリング。 clInitializer
オブジェクトにプロパティAVOptions
のみ(またはnullプロパティのみ)がある場合、{}
を渡したときにclInitializer
が返されました。