私はメンバーが飾られている多くのデータコントラクトを持つシステムがあります。JSON.net
[DataMember(EmitDefaultValue = false)]
私はメンバーが含まれる必要があるケースを持っているの際はnullときJSONにシリアル化されています。私が選んだシリアライザの設定に関係なく、これを動作させることはできません。
[TestMethod]
public void SerializationTest()
{
var contract = Activator.CreateInstance(typeof(TestContract));
var formatter = new JsonMediaTypeFormatter
{
SerializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Include,
DefaultValueHandling = DefaultValueHandling.Ignore,
TypeNameHandling = TypeNameHandling.All,
ContractResolver = new DataContractResolver(),
Binder = new DataContractBinder()
}
};
var result = JsonConvert.SerializeObject(contract, formatter.SerializerSettings);
}
プロパティごとにオーバーライドを追加するカスタムデータコントラクトリゾルバも作成しました。
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, MemberSerialization.Fields);
property.NullValueHandling = NullValueHandling.Include;
property.DefaultValueHandling = DefaultValueHandling.Ignore;
property.ShouldSerialize = o => true;
return property;
}
私はemitのデフォルト値= falseを無視するために、すべてのバリエーションのnull値の処理とデフォルト値の処理を試しました。 json net docsによると、これらの設定は私のオブジェクトにnullプロパティを与えるはずです。 jsonのネットソースをデバッグする前に、他に何かがありますか?
興味深い。 SerializerSettingsを設定するときに、その組み合わせを試してみました。ドキュメントはあなたがとにかく無視使うことになっているようにそれが聞こえるので、私はオーバーライドで同様のことを行っていませんでした。これらの設定を使用し、カスタムリゾルバを使用する場合は動作します。属性を上書きすることが許可されているかどうかを設定に伝える方が良い方法のようです。ありがとう。 – twifosp