博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 对json字符串转换操作
阅读量:4041 次
发布时间:2019-05-24

本文共 4179 字,大约阅读时间需要 13 分钟。

一, 方法1

Json.net实现方便的Json转C#(dynamic动态类型)对象
以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收。这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦。

C# 4.0 之后有了动态类型dynamic。用这个东西配合Json.net可以实现不用定义实体类的json转dynamic类型对象。

以下示例需要先引用Newtonsoft.Json.dll

public class Person {
public int Id {
get; set; } public string Name {
get; set; }} class Program{
static void Main(string[] args) {
Person p = new Person(); p.Id = 1; p.Name = "刘备"; //C#对象转Json string json = JsonConvert.SerializeObject(p); Console.WriteLine(json); //{"Id":1,"Name":"刘备"} //此处模拟在不建实体类的情况下,反转将json返回dynamic对象 var DynamicObject = JsonConvert.DeserializeObject
(json); Console.WriteLine(DynamicObject.Name); //刘备 Console.ReadKey(); }}

以上只是借用了一个实体类来获得一个简单的JSON对象。

实际上,可以完全没有这个Person类。

static void Main(string[] args){
string json = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"22\"}"; //此处模拟在不建实体类的情况下,反转将json返回回dynamic对象 var DynamicObject = JsonConvert.DeserializeObject
(json); Console.WriteLine(DynamicObject.Name); //刘备 Console.ReadKey();}

如果未引用Microsoft.CSharp.dll,关于动态类型,VS可能会报错。

VS 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

二, 方法2

利用System.Web.Helpers, 注:需要引入 System.Web.Helpers.dll. 例子:

1. 参数:jsonStr{
"log_id": 620759800, "words_result": [ {
"location": {
"left": 56, "top": 0, "width": 21, "height": 210 }, "words": "3" } ], "words_result_num": 1}2.函数 //use linq to get the max number from the return json format string public string GetMaxNumber(string jsonStr) {
try {
dynamic data = System.Web.Helpers.Json.Decode(jsonStr);//convert json string to dynamic object. need add reference of "System.Web.Helpers.dll" , 对应的是 Json.Encode() var result = (from i in (IEnumerable
)data.words_result select new {
num = int.Parse(i.words) }).Max(c => c.num); return Convert.ToString(result); } catch (Exception e) {
return ""; } }

三.方法3

JavaScriptSerializer.Serialize 方法
定義
命名空間:
System.Web.Script.Serialization
組件:
System.Web.Extensions.dll
適用於
.NET Framework 4.8 及其他版本
参考:
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.script.serialization?view=netframework-4.8

using System;using System.Collections.Generic;using System.Web.UI;using System.Web.Script.Serialization;namespace ExampleApplication{
public partial class _Default : Page {
protected void Page_Load(object sender, EventArgs e) {
var RegisteredUsers = new List
(); RegisteredUsers.Add(new Person() {
PersonID = 1, Name = "Bryon Hetrick", Registered = true }); RegisteredUsers.Add(new Person() {
PersonID = 2, Name = "Nicole Wilcox", Registered = true }); RegisteredUsers.Add(new Person() {
PersonID = 3, Name = "Adrian Martinson", Registered = false }); RegisteredUsers.Add(new Person() {
PersonID = 4, Name = "Nora Osborn", Registered = false }); var serializer = new JavaScriptSerializer(); var serializedResult = serializer.Serialize(RegisteredUsers); // Produces string value of: // [ // {"PersonID":1,"Name":"Bryon Hetrick","Registered":true}, // {"PersonID":2,"Name":"Nicole Wilcox","Registered":true}, // {"PersonID":3,"Name":"Adrian Martinson","Registered":false}, // {"PersonID":4,"Name":"Nora Osborn","Registered":false} // ] var deserializedResult = serializer.Deserialize
>(serializedResult); // Produces List with 4 Person objects } } public class Person {
public int PersonID {
get; set; } public string Name {
get; set; } public bool Registered {
get; set; } }}

转载地址:http://wimdi.baihongyu.com/

你可能感兴趣的文章
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>