【问题标题】:Indexing a derived [ElasticType] only serializes the base class' properties索引派生的 [ElasticType] 仅序列化基类的属性
【发布时间】:2015-09-05 03:35:26
【问题描述】:

对于我的生活,我无法弄清楚为什么 Nest 在索引实例时只序列化以下基类的属性,即使我告诉它索引派生类。

基类:

[ElasticType(Name = "activity")]
public class Activity
{
    [ElasticProperty(Name = "name")]
    public string Name { get; set; }

    [ElasticProperty(OptOut = true)]
    public DateTimeOffset Timestamp
    {
        get { return DateTimeOffset.ParseExact(TimestampAsString, "yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture).ToUniversalTime(); }
        set { TimestampAsString = value.ToString("yyyyMMddTHHmmssZ"); }
    }

    [Obsolete("Use Timestamp, instead.")]
    [ElasticProperty(Name = "timestamp")]
    public string TimestampAsString { get; set; }

    [ElasticProperty(Name = "application")]
    public string Application { get; set; }

    [ElasticProperty(Name = "application_version")]
    public string ApplicationVersion { get; set; }

    [ElasticProperty(OptOut = true)]
    public IPAddress RemoteIpAddress
    {
        get { return IPAddress.Parse(RemoteIpAddressAsString); }
        set { RemoteIpAddressAsString = value.ToString(); }
    }

    [Obsolete("Use RemoteIpAddress, instead.")]
    [ElasticProperty(Name = "remote_ip_address")]
    public string RemoteIpAddressAsString { get; set; }
}

派生类:

private class SearchCountsRetrievedActivity : Activity
{
    [ElasticProperty(OptOut = true)]
    public PunctuationlessGuid? PrincipalIdentityId
    {
        set { PrincipalIdentityIdAsString = value; }
    }

    [ElasticProperty(Name = "principal_identity_id")]
    public string PrincipalIdentityIdAsString { get; set; }
}

我的索引包装方法:

public Task IndexActivityAsync<TActivity>(TActivity activity)
    where TActivity : Activity
{
    return _client.IndexAsync(activity);
}

无论我做什么,通过网络发送的序列化 JSON 仅包含 Activity 类的属性。我试过的:

  • 将派生类公开
  • 在派生类中添加[ElasticType]
  • 检查 Nest 源代码(这非常困难,因为源代码非常复杂,而且我引用的 NuGet 包,即使它是最新的,但似乎与最新源不兼容)

【问题讨论】:

    标签: c# nest


    【解决方案1】:

    显然,底层的默认 JSON 序列化程序序列化具有 null 值的属性。在我的例子中,我的属性值是null,所以这就是它们没有被序列化的原因。当值不是 null 时,序列化程序可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多