2017-08-08 131 views
1

我有一个REST客户端,它使用Json数据填充Geode区域,Geode REST API自动转换为PdxInstance类型。Geode本地客户端反序列化PdxInstanceImpl

该地区触发该TValev.NewValue被视为PdxInstanceImpl类型和看起来像一个C#本地客户端侦听AfterCreate(EntryEvent<TKey, TVal> ev)

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

我从here看到下面的代码可以得到个人Pdx字段

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

和那在字段级别,但我想要转换PdxInstanceImpl收到PdxInstance,所以它可以直接放入另一个区域,或者我想将所有字段转换回JSON(作为一个字符串),然后将Json字符串放入另一个区域,或者像我喜欢的那样使用它。

因此,有显然是一个autoserialize到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,结果是一样的。

任何想法我在这里失踪?感谢

+0

pdx.GetObject()导致'{System.NullReferenceException:未设置为一个对象的实例对象引用。 在System.Object.GetType() 在Apache.Geode.Client.ReflectionBasedAutoSerializer.deserializeFields(字符串O,IPdxReader读取器) 在Apache.Geode.Client.PdxWrapper.FromData(IPdxReader读取器) 在Apache.Geode.Client。 Internal.PdxHelper.DeserializePdx(DataInput dataInput,布尔forceDeserialize,Int32 typeId,Int32长度) at Apache.Geode.Client.Internal.PdxInstanceImpl.GetObject()}' – rupweb

回答

0

在端我已经通过场方法中使用的字段:

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

相关问题