首页 > 解决方案 > Android:将Json字符串转换为List,反之亦然

问题描述

我正在寻找一个示例和活动代码来将对象列表传输到 Json 字符串中,反之亦然。众所周知,Android 经常被用作(在我的情况下)带有 .NET 的 PC 和 Android 设备本身之间的通信设备。非常常见的操作是将 SMS 消息发送给一组订阅者,这通常以对象列表的形式存在......比如说......

class Man { 
public string Number {get;set;} 
public string Message {get;set;} 
}

所以,List<Man> Men = new List<Man>(); 作为基本结构是相当直观的。

我可以在 C#.NET 中转换两种方式

using System;
using Newtonsoft.Json;
using System.Collections.Generic;
public class Program
{
public static void Main() {
List<Man> Men = new List<Man>();
// numbers are just random
Man m1 = new Man();
m1.Number = "+6149168158";
m1.Message = "Hello Bob from 1";
m1.UniqueCode = "0123";
m1.State = 0;

Man m2 = new Man();
m2.Number = "+6146146182";
m2.Message = "Hello Bob from 2";
m2.UniqueCode = "0125";
m2.State = 0;

Men.AddRange(new Man[] { m1, m2 });

string result = JsonConvert.SerializeObject(Men);
Console.WriteLine(result);

List<Man> men = JsonConvert.DeserializeObject<List<Man»(result);
foreach(Man m in men) Console.WriteLine(m.Message);
}
}
public class Man
{
public string Number{get;set;}
public string Message {get;set;}
public string UniqueCode {get;set;}
public int State {get;set;}
}

它可以工作..但是Android方面..就像一个暗物质..我确定它存在,但我无法触摸它..所以,请知道它的人,请在这里发布Android部分,所以其他人会得到这样一个标准要求的好例子。(没有 Gson、Mason 或其他一些......只有 Android 和 JSON ......谢谢......

标签: androidjsonlist

解决方案


看起来您可能不想使用可用的工具(Gson、Mason 或其他一些工具。)您必须为每个对象手动实现映射器类:android 的本机工具是 JSONArray、JSONObject;在下面的代码中,我提供了一个解码示例 好的,这是Deserializator

public List<Man> DecodeFactor(String json) throws JSONException {
    List<Man> list = null;
    try
    {
        JSONArray headarrays=new JSONArray(json);
        if(headarrays.length()>0)
        {
            list=new ArrayList<Man>();
            for (int i = 0; i <headarrays.length() ; i++)
            {
                Man man=new Man();
                JSONObject o = headarrays.getJSONObject(i);
                man.Message = o.getString("Message");
                man.Number = o.getString("Number");
                man.UniqueCode = o.getString("UniqueCode");
                man.State = o.getInt("State");
                list.add(man);
            }
        }
    }catch (Exception ee) { ee.printStackTrace(); }
    return list;
}

推荐阅读