我有一个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,结果是一样的。
知道我在这里缺少什么吗?感谢
答案 0 :(得分:0)
最后我使用了逐场的方法:
IPdxInstance pdx = (IPdxInstance)ev.NewValue;
pdx.GetField("Field1");
pdx.GetField("Field2");
pdx.GetField("Field3");
etc...