使用.Net Core访问WebAPI (2)-数据解析

一、JSON

用字符串的形式表示JSON对象
JSON(JavaScript Object Notation)JavaScript对象表示法
var obj={“Name”:“小奇”,“Age”:19}
JSON是一种轻量级的数据交换语言
JSON是存储和交换文本信息的语法。类似XML
JSON比XML更更小、更快、更容易解析

{
“employees”:[
{“firstName”:“bill”,“lastName”:“tom”},
{“firstName”:“mike”,“lastName”:“lady”},
{“firstName”:“ben”,“lastName”:“su”}
]
}
employees对象是包含了3个员工对象的数组
2.
数据是以键-值对的形式表示的
“firstName”:“bill”
数据值的类型:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号[]中)
对象(在花括号{}中)
数据之间用逗号分隔:
“firstName”:“ben”,“lastName”:“su”
花括号表示对象:
{“firstName”:“ben”,“lastName”:“su”}
方括号表示数组:
[a,b,c]
如何解析JSON呢?
首先需要下载一个包Newtonsoft.Json包
在这里插入图片描述
选择管理NuGet程序包
在这里插入图片描述
如何判断安装成功呢?
在这里插入图片描述
数据解析:

序列化:object->string 把一个对象(不是JSON对象)转换为JSON字符串(JSON对象)
反序列化:string->object

序列化和反序列化也有强和弱之分
强类型:需要定义与string结构匹配的专用class,类中只有属性,而不是字段
弱类型:使用通用的类,只能通过名称来访问属性
强类型序列化:JsonConvert.SerializeObject(object) 返回值是字符串
代码:


强类型反序列化:JsonConvert.DeserializeObject(string)返回值是对象
代码:

using Newtonsoft.Json;
using System;

namespace jsontest
{
    class Program
    {
        static void Main(string[] args)
        {
            var str = "{\"Name\":\"小奇\",\"Age\":\"19\"}";
            var obj = JsonConvert.DeserializeObject<Person>(str);
            Console.WriteLine(obj.Age);
            Console.WriteLine(obj.Name);
        }
    }
    public class Person {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在这里插入图片描述
弱类型序列化:JObject

using Newtonsoft.Json.Linq;
using System;

namespace jsontest
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new JObject();
            obj["Name"] = "小奇";//属性赋值
            obj["Age"] = "19";
            var str = obj.ToString();
            Console.WriteLine(str);
        }
    }
    
}

在这里插入图片描述
弱类型反序列化:JObject.parse(str)
代码:

using Newtonsoft.Json.Linq;
using System;

namespace jsontest
{
    class Program
    {
        static void Main(string[] args)
        {
            var str="{\"Name\":\"小奇\",\"Age\":19}";
            var obj = JObject.Parse(str);
            Console.WriteLine(obj["Name"]);
        }
    }
}

在这里插入图片描述

二、JSON实战练习

代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace jsontest
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var client = new HttpClient();
            Console.WriteLine("输入时间,使用时间格式例如20200502");
            var date = Console.ReadLine();
            var uri = $"http://api.k780.com/?app=life.workday&date={date}&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json";
            var str = await client.GetStringAsync(uri);
            //var obj = JObject.Parse(str);//弱类型反序列化
            var obj = JsonConvert.DeserializeObject<Time>(str);//强类型反序列化
            Console.WriteLine("日期:"+obj.result.date);
            if (obj.result.remark == "")
            {
                Console.WriteLine("事件:无");
            }
            else {
                Console.WriteLine("事件:" + obj.result.remark);
            }
            
        }
    }
    //以下两个类是在强类型反序列化时使用
    public class Result { 
    public string date { get; set; }
    public string remark { get; set; }
    }
    public class Time { 
    public string success { get; set; }
    public Result result { get; set; }
    }
   
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、XML

XML是可扩展标记语言,是一种通用的、强大的数据格式
强类型使用DataContractSerializer解析
弱类型 LINQ TO XML

强类型序列化
代码:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Text;

namespace xmltest
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new Person { Name = "小奇", Age = 19 };
            var serializer = new DataContractSerializer(typeof(Person)); //序列化器
            var stream = new MemoryStream(); //数据流
            serializer.WriteObject(stream,obj); //序列化的结果放在数据流中
            var str = Encoding.UTF8.GetString(stream.ToArray()); //将数据流转换为字符串
            Console.WriteLine(str);
        }
    }
    public class Person { 
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在这里插入图片描述
强类型反序列化
代码:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Text;

namespace xmltest
{
    class Program
    {
        static void Main(string[] args)
        {
            var str = "<Person xmlns=\"http://schemas.datacontract.org/2004/07/xmltest\"><Age>19</Age><Name>小奇</Name></Person>";
            var stream = new MemoryStream(Encoding.UTF8.GetBytes(str));
            var serializer = new DataContractSerializer(typeof(Person));
            var obj=serializer.ReadObject(stream) as Person;
            Console.Write(obj.Name);
            
        }
    }
    public class Person { 
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值