アンドロイドJSONシリアライズとデシリアライズ中

最近のプロジェクトの後アンドロイドでJSON文字列オブジェクトをオンにする必要があり、オブジェクトをデシリアライズ、AndroidのSDKドキュメントへのアクセスとC#には同様のアンドロイドDataContractJsonSerializerクラスを発見した、需要があまりにも複雑ではないと思う、あなた自身を書きます2つのソリューション、次のように:

パブリック  静的  文字列getJson(オブジェクトobjSource){
         試みる {
            Objectオブジェクト= getJsonObject(objSource)。
             もし (オブジェクト==  nullの
                 リターン  "";
             リターン  ((JSONObject)オブジェクト).toString();
        } キャッチ (例外ERR){
            Log.e(TAG、 "getJson例外:" + err.getMessage())。
             リターン  「」;
        }
    }
    
     プライベート  静的  オブジェクトgetJsonObjectは(objSourceオブジェクト)  スロー  {例外の
         場合 (objSource!=  NULL ){            
            <?>クラスobjClass = objSource.getClass()。
             もし (objClass.getPackage()のgetName()のstartsWith(PackageString)。。){
                JSONObject jsonObject =  新しい  JSONObject()。
                フィールド[] publicFields = objClass.getFields()。
                valのオブジェクト。            
                 (フィールドフィールド:publicFields){
                    ヴァル= field.get(objSource)。
                     もし (!ヴァル=  ヌル ){    
                        <?>クラスvalClass = val.getClass();
                         もし (valClass.isArray()){
                            JSONArray配列=  新しいです  JSONArray();
                             int型の  長さ= Array.getLength(ヴァル)。
                             以下のために int型  、iは長さ<; I = 0 iは++){
                                array.put(getJsonObject(Array.get(ヴァル、I)))。
                            }
                            jsonObject.put(field.getName()、配列)。
                        } そう  であれば (valClass.equals(のArrayList。 クラス )){
                            のArrayList <?> aListの=のArrayList。 クラス .cast(val)で、
                            <?>イテレータイテレータ= aList.iterator();
                            JSONArray配列=  新しい  JSONArray();
                             一方、  (iterator.hasNext()){
                                array.put(getJsonObject(iterator.next()))。                                
                            }
                            jsonObject.put(field.getName()、配列)。
                        } {
                            jsonObject.put(field.getName()、getJsonObject(ヴァル))。
                        }
                    } {
                        jsonObject.put(field.getName()、  NULL );
                    }                
                }
                 返す  jsonObjectを。
            } {
                 戻り  objSourceと、
            }
        }
         戻り  ヌル
    }
    
    
     パブリック  静的  オブジェクトparseJson(<?>クラスtargetClass、ストリングjsonString){
         試みる {
            Objectオブジェクト= targetClass.newInstance()。
            JSONObject jsonObject =  新しい  JSONObject(jsonString)。
            文字列のキー。
            <?>クラスfieldClass。
            Object要素。
            <?>クラスをelementType。
            フィールド[]フィールド=のtargetClass.getFields()。
            
             (フィールドフィールド:フィールド){
                
                キー= field.getName()。
                fieldClass = field.getType()。
                 もし (fieldClass.equals(のArrayList。 クラス )){
                    文字列genericType = field.getGenericType()のtoString()。
                     もし (genericType.indexOf( "<")> 0){
                        genericType = genericType.substring(genericType.indexOf( "<")+ 1、genericType.lastIndexOf( ">"));    
                    }
                    のArrayList <OBJECT> aListの=  新規  のArrayList <オブジェクト>();
                    JSONArray配列= jsonObject.getJSONArray(キー)。
                     int型の  長さ= Array.lengthと()。
                     もし (genericType.startsWith(PackageString)){
                        をelementType = Class.forNameの(genericType)。
                        フィールド[] elementFieldsの=のelementType.getFields()。
                        JSONObject subJsonObject;
                         以下のために int型  、iは長さ<; I = 0 iは++){
                            要素= elementType.newInstance()。
                            subJsonObject = array.getJSONObject(I)。
                             (フィールドのサブフィールド:elementFields){
                                subField.set(要素、subJsonObject.get(subField.getName()))。
                            }
                            aList.add(要素)                        
                        }
                    } {
                         ため int型  {; iは長さ<I ++はI = 0)
                            aList.add(array.get(I))。
                        }
                    }
                    field.set(オブジェクト、aListの)。
                    
                } そう  であれば (fieldClass.isArray()){
                    JSONArray配列= jsonObject.getJSONArray(キー)。
                     int型の  長さ= Array.lengthと()。
                    ストリングarrayTypeName = fieldClass.getComponentType()のgetName()。
                    オブジェクト[] objArray =  新しい  オブジェクト[長さ]。
                     
                     もし (arrayTypeName.startsWith(PackageString)){
                        をelementType = Class.forNameの(arrayTypeName)。
                        フィールド[] elementFieldsの=のelementType.getFields()。
                        JSONObject subJsonObject;
                         以下のために int型  、iは長さ<; I = 0 iは++){
                            要素= elementType.newInstance()。
                            subJsonObject = array.getJSONObject(I)。
                             (フィールドのサブフィールド:elementFields){
                                subField.set(要素、subJsonObject.get(subField.getName()))。
                            }
                            objArray [I] =要素;                        
                        }
                    } {
                         ため int型  、iは長さ<; I = 0 iは++){
                            objArray [I] = array.get(I)。
                        }
                    }
                    field.set(オブジェクト、objArray)。
                    
                } {
                    field.set(オブジェクト、jsonObject.get(キー))。
                }
            }
             戻り  オブジェクト。
        } キャッチ (例外ERR){
            Log.e(TAG、 "parseJson例外:" + err.getMessage())。
             リターン  ヌル
        }
    }

 基本タイプ、配列、クラスのArrayListのメンバーをサポートしています

ます。https://www.cnblogs.com/hdjjun/archive/2012/08/30/2663981.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33895604/article/details/94497360