Xamarin C#无法调用Google Gson FromJson

时间:2019-06-03 16:22:15

标签: c# android xamarin gson

我正在尝试调用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”。

2 个答案:

答案 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>();;