2016-05-13 9 views
1

Ich möchte den IsoDateTimeConverter von Newtonsoft verwenden, um die Json-Version meiner DateTime-Eigenschaften zu formatieren.Nest 2.x - Benutzerdefinierter JsonConverter

Allerdings kann ich nicht herausfinden, wie das in Nest 2.x gemacht wird.

Hier ist mein Code:

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

ich diese Ausnahme erhalten:

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" 

Jede Hilfe

Antwort

2

mit dem Func<Type, JsonConverter> geschätzt wird, müssen Sie, dass die Art überprüfen ist, die richtige für den Konverter, den Sie registrieren möchten; wenn es ist, für die Konverter Beispiel zurückkehren sonst 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 die IsoDateTimeConverter für diese Typen standardmäßig verwendet, so dass Sie nicht einen Konverter für sie registrieren müssen, wenn Sie andere Einstellungen möchte sich ändern der Konverter.

+0

Danke - es macht vollkommen Sinn – Rasmus

Verwandte Themen