最近のプロジェクトの後アンドロイドで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())。
リターン ヌル 。
}
}
試みる {
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で再現