2016-05-13 4 views
1

NewtonsoftのIsoDateTimeConverterを使用して、DateTimeプロパティのjsonバージョンをフォーマットします。ネスト2.x - カスタムJsonConverter

しかし、これはNest 2.xでどのように行われているのかわかりません。ここで

は私のコードです:

var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); 
var settings = new ConnectionSettings(connectionPool, s => new MyJsonNetSerializer(s)); 
var client = new ElasticClient(settings); 



public class MyJsonNetSerializer : JsonNetSerializer 
    { 
     public MyJsonNetSerializer(IConnectionSettingsValues settings) : base(settings) { } 

     protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings) 
     { 
      settings.NullValueHandling = NullValueHandling.Ignore; 
     } 

     protected override IList<Func<Type, JsonConverter>> ContractConverters => new List<Func<Type, JsonConverter>>() 
     { 
      type => new Newtonsoft.Json.Converters.IsoDateTimeConverter() 
     }; 
    } 

私はこの例外を取得しています:すべてのヘルプはFunc<Type, JsonConverter>

答えて

2

を高く評価している

message: "An error has occurred.", 
exceptionMessage: "Unexpected value when converting date. Expected DateTime or DateTimeOffset, got Nest.SearchDescriptor`1[TestProject.DemoProduct].", 
exceptionType: "Elasticsearch.Net.UnexpectedElasticsearchClientException" 

、あなたはタイプがあることを確認する必要がありますあなたが登録したいコンバータのための正しいもの。それがある場合は、コンバータのインスタンスを返し、そうでない場合はnull

public class MyJsonNetSerializer : JsonNetSerializer 
{ 
    public MyJsonNetSerializer(IConnectionSettingsValues settings) : base(settings) { } 

    protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings) 
    { 
     settings.NullValueHandling = NullValueHandling.Ignore; 
    } 

    protected override IList<Func<Type, JsonConverter>> ContractConverters => new List<Func<Type, JsonConverter>>() 
    { 
     type => 
     { 
      return type == typeof(DateTime) || 
        type == typeof(DateTimeOffset) || 
        type == typeof(DateTime?) || 
        type == typeof(DateTimeOffset?) 
       ? new Newtonsoft.Json.Converters.IsoDateTimeConverter() 
       : null; 
     } 
    }; 
} 

を返すNESTは、デフォルトでは、これらのタイプのIsoDateTimeConverterを使用していますので、あなたが他の設定を変更したい場合を除き、あなたは彼らのために、コンバータを登録する必要はありませんコンバータ。

+0

ありがとうございます – Rasmus

関連する問題