反序列化重大更改 - Elasticsearch 7Nest 7,Elasticsearch.net

问题描述

由于 Elasticsearch 从 ver6.8 升级到 Elasticsearch 7 后 ELasticsearch 7(nest7、elasticsearch.net)发生了重大变化,我收到了反序列化异常。

在将嵌套 nesT 6 报告给 Elastichsearch 6 时,我们使用了 JsonConvert.DeserializeObject:

Dictionary<string,List<string>> filteredValuesPerColumnTitles = JsonConvert.DeserializeObject<Dictionary<string,List<string>>>(plotlyTraceData.FilteredValuesPerColumns);

或这些行:

CreateMap<TraceData,TraceResource>().ForMember(r => r.TraceJsonData,opt => opt.MapFrom(d => JsonConvert.DeserializeObject<Dictionary<string,object>>(d.TraceJsonData)));

public class TraceData
{
   public string DataSessionNumber { get; set; }

   public string FilteredValuesPerColumns { get; set; }

   public string TraceJsonData { get; set; }
}

public class TraceResource : BaseResource  
{     

   public string FilteredValuesPerColumns { get; set; }

   public string TraceJsonData { get; set; }

 public Dictionary<string,object> TraceJsonData { get; set; }

}

升级到 Elasticsearch 7、nest7 和 elasticsearch.net 后,我​​尝试按照新格式更改反序列化:

 Dictionary<string,List<string>> filteredValuesPerColumnTitles = new Dictionary<string,List<string>>();
 JsonNetSerializer jsonNetSerializer = new JsonNetSerializer(traceRepository.sourceSerializer,traceRepository.ConnectionSettings);
 
byte[] bytes = Encoding.UTF8.GetBytes(plotlyTraceData.FilteredValuesPerColumns);
using (MemoryStream memoryStream = new MemoryStream(bytes))
{
   filteredValuesPerColumnTitles = jsonNetSerializer.Deserialize<Dictionary<string,List<string>>> 
   (memoryStream);
}

但是我遇到了下一个异常,嵌套 6 或嵌套 7 试图向 ElasticSearch7 报告:

{Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:S. 路径 '',第 0 行,位置 0。 在 Newtonsoft.Json.JsonTextReader.ParseValue() 在 Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract,Boolean hasConverter) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType,Boolean checkAdditionalContent) 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置) 在 Controllers.OutputController.d__4.MoveNext() 在 C:\Projects\Controllers\OutputController.cs:line 99}

客户端初始化:

    var uri = new UriBuilder("http",ElasticHandlerSettings.Value.ElasticUri,Convert.ToInt32(ElasticHandlerSettings.Value.ElasticPort)).Uri;

    // Set Default Mapping for GET methods //
    var settings = new ConnectionSettings(uri)
        .DefaultMappingFor<AutomationLogData>(m => m
        .IndexName($"{IndexPrefix.LOG_INDEX_PREFIX}-*"))
        //.TypeName(nameof(AutomationLogData)))
        .DefaultMappingFor<AutomationLayoutData>(m => m
        .IndexName($"{IndexPrefix.LAYOUT_INDEX_PREFIX}-*"))
        //.TypeName(nameof(AutomationLayoutData)))
        .DefaultMappingFor<TraceData>(m => m
        .IndexName($"{IndexPrefix.TRACE_INDEX_PREFIX}-*"));
        //.TypeName(nameof(TraceData)));

    Client = new Elasticclient(settings);

请告知如何修复它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...