我正在尝试调用Google Gson(在C#中,Xamarin)的方法“ fromJSon”,但是我收到以下错误消息:“参数2,无法将Java.Lang.Object转换为Java.Lang.Class”。 / p>
这是我相关部分的源代码:
...
HomePojo mHomePojo = null;
Gson mGson = new Gson();
try
{
GoogleGson.JsonObject dataObject = jObject.GetAsJsonObject(AppGlobal.TAG_JSON_DATA_OBJECT);
Java.Lang.Object clazz = Java.Lang.Class.FromType(typeof(HomePojo));
mHomePojo = mGson.FromJson(dataObject.AsJsonObject, clazz);
}
catch (JSONException e)
{
Console.WriteLine(e.ToString());
Console.Write(e.StackTrace);
}
return mHomePojo;
...
它显示“参数2,无法将Java.Lang.Object转换为Java.Lang.Class”。
答案 0 :(得分:1)
您需要将变量声明为Java.Lang.Class
,以使其与参数类型匹配。
答案 1 :(得分:0)
您需要创建一个 ObjectTypeHelper 类。
git pull
和 HomePojo 类应该从 ObjectTypeHelper 继承,然后尝试使用以下代码:
git push
如果不起作用,也许Gson仍与xamarin android兼容。
WorkaRound :
为什么不使用 Newtonsoft.Json 反序列化json。
public static class ObjectTypeHelper
{
public static T Cast<T>(this Java.Lang.Object obj) where T : class
{
var propertyInfo = obj.GetType().GetProperty("Instance");
return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T;
}
}
然后您应该可以反序列化json:
GoogleGson.JsonObject dataObject = jObject.GetAsJsonObject(AppGlobal.TAG_JSON_DATA_OBJECT);
mHomePojo = mGson.FromJson(dataObject.AsJsonObject, Java.Lang.Class.FromType(typeof(HomePojo)).Cast<HomePojo>();;