我有一个REST客户端,它使用Json数据填充Geode区域,Geode REST API自动转换为PdxInstance类型。Geode本地客户端反序列化PdxInstanceImpl
该地区触发该TVal
型ev.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,结果是一样的。
任何想法我在这里失踪?感谢
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