2012-10-15 2 views
5

現在、次のコンストラクタを使用しています。設定とコンバータパラメータを持つJson.netコンストラクタなし

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

私たちが直面している問題は、時々jsonが異なる順序でシリアル化されることです。これは私たちのテストと私たちが行うハッシュチェックに問題を引き起こします。私はあなたが正常にこれに伴う問題は、私ができることですJsonSerializationSettingsオブジェクトを初期化することによって、これを使用して

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

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

のようにコンストラクタにそれを通過する顧客の設定を使用してプロパティを注文することができます例

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

を見つけましたコンバーターと設定パラメーターを使用するコンストラクターのオーバーロードが見えますが、どのように両方を使用することができますか?

答えて

10

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

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

var text = JsonConvert.SerializeObject(message, Formatting.Indented, settings); 
+0

それを受け入れるとマークすると、それも私を助けました:) –

関連する問題