c# - 如何反序列化包含 JSON.NET 中的字符串和对象的数组

标签 c# arrays vb.net serialization json.net

我正在尝试将特殊数组反序列化为 Visual Basic 中的对象。 下面的json数据是我用的webservice下发的;我感兴趣的部分是“数据”属性;基本上它是一个字符串数组的数组,每个数组代表一个对象:

{"timestamp":1385984969075,
"data":
[
  [1590,null,null,null,0],
  [1020,"data a",null,null,0],
  [1025,"data b",null,null,0],
  ...
  [2756,"data c",null,
    [
      {"id":2,"name":"Tom","mail":"tom@test.te","f_id":6,"md":1},
      {"id":3,"name":"Carl","mail":"carl@test.te","f_id":6,"md":1}
     ]
  ,3],
  [1277,"data d",null,null,0],
  ...
  ]}

在此示例中,每个数组的数据项 4 可能为空或包含一个对象数组。

我想将数组反序列化为一个对象列表,但我无法让它工作。我搜索了很多类似的帖子,但到目前为止我找不到任何有用的东西。

(我在 Visual Basic.net 中编写,但欢迎使用 C# 示例。)

有人可以帮忙吗?

最佳答案

更新:

这是另一个使用对象数组映射您拥有的数组的示例。然后我提取了数组中的每条数据。

再次希望这对您有所帮助:

var list = new People
        {
            PersonList = new object[]
            {
              new object[]
             {
               "Test1", "Test2", "Test3", null, new object[]{new Person{Name="John", Age=21}}, 1
             },
              new object[]
             {
               "Test4", "Test5", "Test6", null, null, 2
             },
             new object[]
             {
               "Test17", "Test8", "Test9", null, new object[]{new Person{Name="Sara", Age=31}}, 3
             },
                new object[]
             {
               "Test10", "Test11", "Test12", null, null, 4
             },
             new object[]
             {
                 "Test13", "Test14", "Test15", null, new object[]{new Person{Name="John", Age=31}}, 5
             }
             }
        };

        string output = JsonConvert.SerializeObject(list);

        var objList = JsonConvert.DeserializeObject<People>(output);

        objectList = objList.PersonList;

        foreach(JArray objectItem in objectList)
        {

            var stringOne = (string)objectItem[0];
            var stringTwo = (string)objectItem[1];
            var stringthree = (string)objectItem[2];
            var nullObj = objectItem[3];

            foreach(var individual in objectItem[4])
            {
                JObject obj = (JObject)JToken.FromObject(individual);
                var person = obj.ToObject<Person>();

                string name = person.Name;
                int age = person.Age;
            }
            var num = (int)objectItem[5];
        }

JSON:

{
"PersonList": [
    [
        "Test1",
        "Test2",
        "Test3",
        null,
        [
            {
                "Name": "John",
                "Age": 21
            },
            {
                "Name": "Pete",
                "Age": 44
            }
        ],
        1
    ],
    [
        "Test4",
        "Test5",
        "Test6",
        null,
        null,
        2
    ],
    [
        "Test17",
        "Test8",
        "Test9",
        null,
        [
            {
                "Name": "Sara",
                "Age": 31
            }
        ],
        3
    ],
    [
        "Test10",
        "Test11",
        "Test12",
        null,
        null,
        4
    ],
    [
        "Test13",
        "Test14",
        "Test15",
        null,
        [
            {
                "Name": "John",
                "Age": 31
            }
        ],
        5
    ]
]

人类:

 public class Person
{
    public string Name { set; get; }

    public int Age { set; get; }
}

PeopleList 类:

 public class People
{
    public object[] PersonList { set; get; }
}

关于c# - 如何反序列化包含 JSON.NET 中的字符串和对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351334/

相关文章:

C# 错误转换 int 类型

c# - 设置透明色

c# - 为什么 Swagger CodeGen 3.0.x 使用 AllOf[Classname] 生成类

javascript - 数组间运算的语义

php - 在数组中设置嵌套项

c# - EventToCommand 永远不会被触发 - MVVM

php - 如何获取数组作为列表

vb.net - 将子文件夹复制到 VB.NET 中的另一个文件夹而不覆盖

asp.net - 如何从日期时间获取日期部分?

vb.net - 如何与流程输出交互?