سؤال

حسنًا ، يجب أن أعترف أنني لست جيدًا في النوع العام في Java

لقد كتبت فئة JSON Serialize/Deserialize في C# باستخدام JavaScriptSerializer

    private static JavaScriptSerializer js = new JavaScriptSerializer();

    public static T LoadFromJSONString<T>(string strRequest)
    {
        return js.Deserialize<T>(strRequest);
    }

    public static string DumpToJSONString<T>(T rq)
    {
        return js.Serialize(rq);
    }

إنه يعمل بشكل جيد في C#. الآن أحاول تحويل ، أو على الأقل ، كتابة فئة أخرى من JSON/Deserialize في Java. لقد حاولت Flexjson و Google-GSON لكني لا أعرف كيف أحددu003CT> في جافا.

هل يمكن لأحد هنا مساعدتي؟ راجع للشغل ، أنا أفضل Google-GSON

هل كانت مفيدة؟

المحلول

في Java ، يجب أن تمرر فئة فعلية ذات نوع جديد ، وليس فقط معلمة النوع ، لذلك تعرف مجلدات البيانات على نوع الاستخدام ؛ لذلك شيء مثل:

public static T LoadFromJSONString<T>(string strRequest, Class<T> type)
{
    Gson gson = new Gson();
    return gson.fromJson(strRequest, type);
}

ولكن هذا عادة ما يكون هناك حاجة فقط لإلغاء التسلسل. عند التسلسل ، لديك مثيل مع فئة يمكن للمكتبات استخدامها.

راجع للشغل ، مكتبة جافا Json جيدة أخرى قد ترغب في التفكير فيها IS جاكسون; ؛ ومع ذلك ، في هذا المثال بالذات ، يجب أن تعمل جميع المكتبات التي تذكرها.

نصائح أخرى

بعد التفكير في هذا الأمر ، لا أعتقد أن هناك طريقة لحل هذا الأمر كما هو الحال في رمز C# الخاص بك. هذا بسبب محو النوع الذي قام به برنامج التحويل البرمجي Java.

من المحتمل أن يكون الحل الأفضل بالنسبة لك هو استخدام كائن GSON في الموقع الذي تعرفه نوع الكائن الذي تحتاجه لتسلسل/هجر.

إذا لم تكن حريصًا على إنشاء مثيلات من كائن GSON في كل مرة يمكنك بالطبع الحفاظ على ذلك ثابتًا على الأقل ، لأنه لا يحتاج إلى أي معلمات نوع عند الإنشاء.

هذا يجب أن يعمل:

import com.google.gson.Gson;
public class GenericClass {

    private static Gson gson = new Gson(); 

    public static <T> T loadFromJSONString(String strRequest)
    {
        return (T) gson.fromJson(strRequest, T.class);
    }

    public static <T> String dumpToJSONString(T rq)
    {
        return gson.toJson(rq);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top