【问题标题】:Android: Convert Json string into List and vice versaAndroid:将Json字符串转换为List,反之亦然
【发布时间】:2020-01-03 23:01:28
【问题描述】:

我正在寻找一个示例和活动代码来将对象列表转换为 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 .. 谢谢。。

【问题讨论】:

    标签: android json list


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

    • 谢谢..不。我很乐意使用任何但我还没有看到任何可行的例子,而且,知道反射是什么,我只是想知道为什么 Json 不提供这种转换自动.. Man 类型是并且将在 Android 代码中定义,所以我只想说给我 Man-objects 的列表,所有名称和值都在.. 并且知道有你的回复我知道没有这样的选项,虽然在 Java 下的 Gson 中是这样的......
    • 实际上,几个月前我正在做这样的映射器(我在某处丢失了它),我在字符串列表中多了一个元素 - 类型名称。所以当我重新创建结构时,我知道键入名称并能够创建并填写该映射器中的所有字段。因此用户不必太关心其中的内容。感谢你的回复。相信我,它将非常有用。
    • 除了您在 for 循环中解码 JSON 数据但仍然只提取零索引 JSON 对象 --> new JSONObject(headarrays.getJSONObject(0).toString()); 而不是使用 i 的事实之外,您不必要地创建一个新的JSONObject,你需要做的就是:JSONObject o = headarrays.getJSONObject(i);
    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 2011-05-27
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多