7

現在、次のコンストラクターを使用しています。

var text = JsonConvert.SerializeObject(message, new IsoDateTimeConverter());

私たちが直面している問題は、json が異なる順序でシリアル化されることがあるということです。これにより、テストとハッシュ チェックで問題が発生します。顧客設定を使用してプロパティを注文できる例を見つけました

public class OrderedContractResolver : DefaultContractResolver
{
    protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
    {
        return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName).ToList();
    }
}

通常は JsonSerializationSettings オブジェクトを初期化してこれを使用し、次のようにコンストラクターに渡します。

var settings = new JsonSerializerSettings()
{
    ContractResolver = new OrderedContractResolver()
};

var json = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);

これの問題は、コンバーターと設定パラメーターを使用するコンストラクターのオーバーロードが表示されないことです。両方を使用する方法はありますか?

4

1 に答える 1

15

見つかりました。設定オブジェクトにコンバーター プロパティがあります。

var settings = new JsonSerializerSettings()
{
     ContractResolver = new OrderedContractResolver()
};
settings.Converters.Add(new IsoDateTimeConverter());

var text = JsonConvert.SerializeObject(message, Formatting.Indented, settings);
于 2012-10-15T02:00:20.447 に答える