Gemfire 如何使用Apache Geode类型注册表来编写域对象数组

Gemfire 如何使用Apache Geode类型注册表来编写域对象数组,gemfire,geode,Gemfire,Geode,我正在处理一个修复重复组,其中报价请求可以有x个分支。我做了一个类似这样的腿部训练: public class Leg : IPdxSerializable { public string Side { get; set; } public decimal Size { get; set; } public string ValueDate { get; set; } public void ToData(IPdxWriter writer) { writer.Wr

我正在处理一个修复重复组,其中报价请求可以有x个分支。我做了一个类似这样的腿部训练:

public class Leg : IPdxSerializable
{
  public string Side { get; set; }
  public decimal Size { get; set; }
  public string ValueDate { get; set; }

  public void ToData(IPdxWriter writer)
  {
    writer.WriteString("Side", Side);
    writer.WriteDouble("Size", Convert.ToDouble(Size));
    writer.WriteString("ValueDate", ValueDate);
  }

  public void FromData(IPdxReader reader)
  {
    Side = reader.readString("Side");
    Size = (decimal) reader.ReadDouble("Size");
    ValueDate = reader.readString("ValueDate");
  }

  public static IPdxSerializable CreateDeserializable()
  {
    return new Leg();
  }

  public Leg () { }
}
quote请求的legs被编写为这些
Leg
对象的数组。在quote请求类中有一个
Leg[]
声明和
ToData FromData
实现。quote request对象被构建并作为PDX类型放入Geode区域,PDX Writer将其中的支腿数组写入为:

writer.writeObject数组(“Legs”,Legs.ToList())

我尝试了不同类型的
Leg
List
作为PDX类型和域对象类型,但是当我
get
得到
GFSH
中的对象时,Leg数组出现了如下错误:

无法创建类分支的实例(通过引用链:org.apache.geode.pdx.internal.PdxInstanceImpl[0]->org.apache.geode.pdx.internal.PdxInstanceImpl[“object”])

无法创建类分支的实例(通过引用链:java.util.Vector[0]->org.apache.geode.pdx.internal.PdxInstanceImpl[“object]”)

我认为这是因为Geode服务器没有在服务器的
TypeRegistry
中注册
Leg
对象类型。自本机客户端的Geode版本10起,不再有可序列化的.RegisterPDXDType
,其使用方式如下:

public class Leg : IPdxSerializable
{
  public string Side { get; set; }
  public decimal Size { get; set; }
  public string ValueDate { get; set; }

  public void ToData(IPdxWriter writer)
  {
    writer.WriteString("Side", Side);
    writer.WriteDouble("Size", Convert.ToDouble(Size));
    writer.WriteString("ValueDate", ValueDate);
  }

  public void FromData(IPdxReader reader)
  {
    Side = reader.readString("Side");
    Size = (decimal) reader.ReadDouble("Size");
    ValueDate = reader.readString("ValueDate");
  }

  public static IPdxSerializable CreateDeserializable()
  {
    return new Leg();
  }

  public Leg () { }
}
Serializable.RegisterPDXDType(Leg.CreateDeserializable)

我找到了类引用,初始化缓存时,区域也将类型注册到缓存中:

\u cache.TypeRegistry.RegisterPdxType(Leg.CreateDeserializable)

但仍然会得到相同的错误

如果一个Legs数组仅仅作为一个对象来写,则是相同的错误

writer.WriteObject(“Legs”,Legs)


如果我将
Leg
对象转换为
string[]
表示,这在
WriteStringArray
ReadStringArray
作为引用请求时可以正常工作,其中
Legs
是字符串数组,但这有它自己的问题,我想使用Leg对象数组,最好是PDX包裹。我缺少什么?

rupweb您可以使用:

output.WriteObject(LEGS\u KEY\u,LEGS);

Legs=(Leg[])输入。读取对象(Legs\u键);
而不是WriteObjectArray/ReadObjectArray。不确定这些限制是什么。仍在调查中