首页新闻找找看学习计划

C#复杂json字符串如何转换成多个同一类型对象

0
悬赏园豆:10 [待解决问题]

前辈们,我又来了,感觉自己总拿现成的东西,有点羞耻...

比如[{"name":"12333","age":"10","length":15},{"name":"23333","age":"8","length":12}]

想转换成class student{
  string name{set;get;}

  int age{set;get;}

  int length{set;get;}

}

这样的对象 student1和student2

该怎么做呢

解决的思路是什么?

(顺便问一个题外话,类似的问题该如何怎样学习去自己解决,需要学习什么呢)

(同学刚给我发了一个第三方库,还没测试,还是想听一下前辈的看法)

1153710305的主页 1153710305 | 初学一级 | 园豆:2
提问于:2017-10-29 15:14
< >
分享
所有回答(6)
0

这个过程叫反序列化,那么具体是什么反序列化就要看你的序列化后的信息是什么样的,比如你的就是json格式的,那么你就json反序列化咯,反序列化了后肯定是要放到某个对象里面的吧,这里再看你的json,它是一个student的数组,那么你就巴拉一个数组出来存放反序列化后的结果即可。

List<Student> students=.....Deserialize(yourRawStringHere);

其实我感兴趣的是为啥你的园豆是负数的。。。。。

Daniel Cai | 园豆:10374 (专家六级) | 2017-10-29 17:01

咦?应该还剩四个的啊。。。怎么会是负的嘞。

我可以把json字符串反序列化生成一个载有想要信息的对象(相当于一个student)

但是想生成两个该怎么办呢。。。。把一串json格式的字符串生成两个以上的对象。。。

支持(0) 反对(0) 1153710305 | 园豆:2 (初学一级) | 2017-10-29 17:13

@1153710305: 所以你反序列化后应该是个student的集合啊。

支持(0) 反对(0) Daniel Cai | 园豆:10374 (专家六级) | 2017-10-29 18:00

@Daniel Cai: 是不是必须序列化的集合才能反序列化啊

支持(0) 反对(0) 猝不及防 | 园豆:1204 (小虾三级) | 2017-10-30 13:30

@猝不及防:没看明白。

支持(0) 反对(0) Daniel Cai | 园豆:10374 (专家六级) | 2017-10-30 13:32
0
var jsonString=[{"name":"12333","age":"10","length":15},{"name":"23333","age":"8","length":12}];
var students= JsonConvert.DeserializeObject<List<Student>>(jsonString)
hellotim | 园豆:1442 (小虾三级) | 2017-10-30 18:44
0

你自己写一个parser

扫描全部字符串

  遇到左中括号,则认为一个集合的开始,期待下一个符合是左花括号

  遇到左花括号。则认为一个实例的开始,标记inst_start,实例一个Student对象为stu

  遇到双引号

        如果prop_start和prop_end都为0,并且propName为空,则认为一个属性的开始,标记prop_start

        如果prop_start已经设置过了,那么设置prop_end,并可以获得一个属性的名称propName

        如果prop_start、prop_end、propName已经设置了,那么认为目前要开始扫描propName的值,设置valueStart

        如果value_Start存在,那么设置value_End,并获得属性的值val,此时设置stu的属性propName的值为val

 

  遇到冒号,并且不在双引号里面,则认为下面要设置propName的值,期待遇到一个双引号

  遇到右花括号,则认为上一个实例stu已经设置完成,期待下一个符合是逗号或者右中括号

 

c99 | 园豆:1832 (小虾三级) | 2017-10-31 00:07
0

我们都用第三方库直接转

虚风客 | 园豆:235 (菜鸟二级) | 2017-10-31 10:57
0

你去Nuget上面能看到下载量第一的包就是序列化json的。

Newtonsoft.Json

_Vegetables | 园豆:569 (小虾三级) | 2017-11-01 09:50
0

  通过 Nuget 使用 Newtonsoft.Json 类库进行反序列化,因为你给出的字符串就是 json 格式,使用 JsonConvert.DeserializeObject() 方法即可。

  代码如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace CompressDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            const string source = "[{'name':'12333','age':'10','length':15},{'name':'23333','age':'8','length':12}]";
            var students = JsonConvert.DeserializeObject<List<Student>>(source);

            foreach (var student in students)
            {
                Console.WriteLine($"Name: {student.Name}, Age: {student.Age}, Length:{student.Length}");
            }

            Console.Read();
        }
    }

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

        public int Age { set; get; }

        public int Length { set; get; }
    }
}

 

  

反骨仔 | 园豆:444 (菜鸟二级) | 2018-03-20 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册