c#解析Json

1 篇文章 1 订阅

​json字符串:

{
  "baseInfo" : {
    "id" : "370171000bd8a85d144e6bbf9bb741aaeb307a",
    "name" : "王尼玛",
    "addr" : null,
    "presentAddressCounty" : "历下区",
    "presentAddressTown" : "建筑新村街道办事处",
    "presentAddressVillage" : "历山东路居委会",
    "presentAddressHouseNum" : "历山东路居委会历山东路2019号11-21-10",
    "isDisease" : "1",
    "isTrauma" : null,
    "isOperration" : null,
    "isTransfusion" : null,
    "idNo" : null
  },
  "EhrPirDisease" : [ {
    "id" : null,
    "pirId" : null,
    "healthRecordCode" : null,
    "diseaseCode" : null,
    "diseaseName" : "冠心病",
    "diagnoseTime" : null
  }, {
    "id" : null,
    "pirId" : null,
    "healthRecordCode" : null,
    "diseaseCode" : null,
    "diseaseName" : "高血压",
    "diagnoseTime" : null
  } ]
}
	利用C#处理这个字符串,在控制台显示出人员一些信息

解决步骤:

  • 在VS中新建项目——控制台应用程序。
  • 引用类库:在VS中点击:项目-》引用-》扩展-》找到Json.Net(Newtonsoft.Json.dll)-》勾选-》确定。
  • 没有就下载对应的版本:http://json.codeplex.com/然后继续上一步
    在这里插入图片描述
    在这里插入图片描述
  • 在主程序Program.cs的开头添加 using Newtonsoft.Json; 这一语句。
  • 把要处理的json字符串复制到VS里面直接选择 编辑-》选择性粘贴-》将Json粘贴为类得到C#类:
public class BaseInfo
        {
            public string id { get; set; }
            public string name { get; set; }
            public string addr { get; set; }
            public string presentAddressCounty { get; set; }
            public string presentAddressTown { get; set; }
            public string presentAddressVillage { get; set; }
            public string presentAddressHouseNum { get; set; }
            public string isDisease { get; set; }
            public string isTrauma { get; set; }
            public string isOperration { get; set; }
            public string isTransfusion { get; set; }
            public string idNo { get; set; }
        }

        public class EhrPirDisease
        {
            public string id { get; set; }
            public string pirId { get; set; }
            public string healthRecordCode { get; set; }
            public string diseaseCode { get; set; }
            public string diseaseName { get; set; }
            public string diagnoseTime { get; set; }
        }

        public class RootObject
        {
            public BaseInfo baseInfo { get; set; }
            public List<EhrPirDisease> EhrPirDisease { get; set; }
        }
把这部分内容放到class Test类的下方。
  • json中有很多的引号,赋值给一个string变量还要加上很多的反斜杠。这里给大家一个在线工具:http://tool.chinaz.com/tools/jsonescape.aspx将Json代码复制进去点击“压缩并转义”,得到的值可以直接赋值给一个string变量,如图:
    在这里插入图片描述
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYUpnCMx-1574303811954)(E:%5CTypora%5Cc++%5C1111831-20170817131223396-1034319951.png)]
string jsonText = "{\"baseInfo\":{\"id\":\"370171000bd8a85d144e6bbf9bb741aaeb307a\",\"name\":\"王尼玛\",\"addr\":null,\"presentAddressCounty\":\"历下区\",\"presentAddressTown\":\"建筑新村街道办事处\",\"presentAddressVillage\":\"历山东路居委会\",\"presentAddressHouseNum\":\"历山东路居委会历山东路2019号11-21-10\",\"isDisease\":\"1\",\"isTrauma\":null,\"isOperration\":null,\"isTransfusion\":null,\"idNo\":null},\"EhrPirDisease\":[{\"id\":null,\"pirId\":null,\"healthRecordCode\":null,\"diseaseCode\":null,\"diseaseName\":\"冠心病\",\"diagnoseTime\":null},{\"id\":null,\"pirId\":null,\"healthRecordCode\":null,\"diseaseCode\":null,\"diseaseName\":\"高血压\",\"diagnoseTime\":null}]}";
  • 反序列化json字符串得到对象。
RootObject rb = JsonConvert.DeserializeObject<RootObject>(jsonText);
  • 处理对象,如输出人员姓名:
Console.WriteLine("姓名:"+rb.baseInfo.name);
  • 完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Newtonsoft.Json;

namespace JsonTest
{
    public class Test
    {
        static void Main(string[] args)
        {
            string jsonText = "{\"baseInfo\":{\"id\":\"370171000bd8a85d144e6bbf9bb741aaeb307a\",\"name\":\"王尼玛\",\"addr\":null,\"presentAddressCounty\":\"历下区\",\"presentAddressTown\":\"建筑新村街道办事处\",\"presentAddressVillage\":\"历山东路居委会\",\"presentAddressHouseNum\":\"历山东路居委会历山东路2019号11-21-10\",\"isDisease\":\"1\",\"isTrauma\":null,\"isOperration\":null,\"isTransfusion\":null,\"idNo\":null},\"EhrPirDisease\":[{\"id\":null,\"pirId\":null,\"healthRecordCode\":null,\"diseaseCode\":null,\"diseaseName\":\"冠心病\",\"diagnoseTime\":null},{\"id\":null,\"pirId\":null,\"healthRecordCode\":null,\"diseaseCode\":null,\"diseaseName\":\"高血压\",\"diagnoseTime\":null}]}";
            Console.WriteLine(jsonText);
            RootObject rb = JsonConvert.DeserializeObject<RootObject>(jsonText);
            Console.WriteLine("姓名:"+rb.baseInfo.name);
            Console.WriteLine("家庭住址:"+rb.baseInfo.presentAddressHouseNum);
            foreach (EhrPirDisease ep in rb.EhrPirDisease)
            {
                Console.WriteLine("既往病史:"+ep.diseaseName);
            }
            //Console.ReadKey();
        }

        public class BaseInfo
        {
            public string id { get; set; }
            public string name { get; set; }
            public string addr { get; set; }
            public string presentAddressCounty { get; set; }
            public string presentAddressTown { get; set; }
            public string presentAddressVillage { get; set; }
            public string presentAddressHouseNum { get; set; }
            public string isDisease { get; set; }
            public string isTrauma { get; set; }
            public string isOperration { get; set; }
            public string isTransfusion { get; set; }
            public string idNo { get; set; }
        }

        public class EhrPirDisease
        {
            public string id { get; set; }
            public string pirId { get; set; }
            public string healthRecordCode { get; set; }
            public string diseaseCode { get; set; }
            public string diseaseName { get; set; }
            public string diagnoseTime { get; set; }
        }

        public class RootObject
        {
            public BaseInfo baseInfo { get; set; }
            public List<EhrPirDisease> EhrPirDisease { get; set; }
        }
    }
}

在这里插入图片描述

  • 对于json字符串中的数组,如本例中的EhrPirDiseas,用这篇文章里的在线工具会自动生成泛型列表List。可以直接把它当成数组使用。遍历数组的方法在此依然适用,例如代码中的:
foreach (EhrPirDisease ep in rb.EhrPirDisease)
    {
        Console.WriteLine("既往病史:"+ep.diseaseName);
    }

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值