Geode本地客户端反序列化PdxInstanceImpl

时间:2017-08-08 12:11:23

标签: gemfire spring-data-gemfire geode

我有一个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");

这适用于字段级别,但我想将收到的PdxInstanceImpl转换为PdxInstance,以便将其直接放入其他区域,或者我想将所有字段转换回来在1中去Json(作为一个字符串)并将一个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,结果是一样的。

知道我在这里缺少什么吗?感谢

1 个答案:

答案 0 :(得分:0)

最后我使用了逐场的方法:

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