Geode 原生客户端反序列化 Pdx Instance Impl

Geode native client deserialise PdxInstanceImpl

我有一个 REST 客户端,它使用 Json 数据填充 Geode 区域,Geode REST API 自动将这些数据转换为 PdxInstance 类型。

区域触发 C# 本机客户端侦听器 AfterCreate(EntryEvent<TKey, TVal> ev),其中 TVal 类型 ev.NewValue 被视为类型 PdxInstanceImpl 并且看起来像:

PDX[7534066,__GEMFIRE_JSON]{@type=MyClass, Field1=Value1, Field2=Value2}

我从here看到下面的代码可以获取到各个Pdx字段

IPdxInstance pdx = (IPdxInstance)ev.NewValue;
pdx.GetField("Field1");

这适用于 Field 级别,但我想将收到的 PdxInstanceImpl 转换为 PdxInstance,以便可以直接将其放入另一个区域,或者我想转换所有将字段返回 Json(作为字符串)1 去并将 Json 字符串放入另一个区域,或按我喜欢的方式使用它。

所以显然有一种方法可以将 PdxInstance 自动序列化为 MyClass 但是如果我尝试

MyClass c = (MyClass)pdx;

然后我得到 System.InvalidCastException: Unable to cast object of type 'Apache.Geode.Client.Internal.PdxInstanceImpl' to type 'MyClass'

我从一些 Java client examples 那里看到您可以使用类型 PdxInstanceImpl 来获取数据,但是在 C# 本机客户端中会出现错误:PdxInstanceImpl is inaccessible due to its protection level.

我添加了autoserializer,结果是一样的。

知道我在这里遗漏了什么吗?谢谢

最后我使用了一个字段一个字段的方法:

IPdxInstance pdx = (IPdxInstance)ev.NewValue;
pdx.GetField("Field1");
pdx.GetField("Field2");
pdx.GetField("Field3");
etc...

在事件处理程序之外,我使用以下方法创建 PDX 实例:

IPdxInstanceFactory writer = Setup.g.GetCache().CreatePdxInstanceFactory("myType");
writer.WriteString("String", "s");
writer.WriteChar("Char", 'c');
writer.WriteDouble("Double", Convert.ToDouble(1000));
IPdxInstance pdx = writer.Create();

读取 PDX 实例:

IPdxInstance pdx = Setup.gpg.GeodeGetPdx("myType", key);
MyType t = new MyType();
t.String1 = (string)pdx.GetField("String1");
t.Int1 = (int)pdx.GetField("Int1");
t.Date1 = (DateTime)pdx.GetField("Date1");
etc...