欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现JSON和对象之间互相转换功能示例

程序员文章站 2023-12-10 16:56:10
本文实例讲述了c#实现json和对象之间互相转换功能。分享给大家供大家参考,具体如下: 1.首先是声明用户信息对象,datacontract修饰类,表示可以被解析成jso...

本文实例讲述了c#实现json和对象之间互相转换功能。分享给大家供大家参考,具体如下:

1.首先是声明用户信息对象,datacontract修饰类,表示可以被解析成json,datamember修饰属性,order表示 解析的顺序,另外lover是数组列表,表示女朋友个数

address 表示送货地址,dailyrecord  表示日常记录

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.runtime.serialization;
namespace functiontest.model
{
  [datacontract]
  public class userinfo
  {
    [datamember(order =0)]
    public string username { get; set; }
    [datamember(order = 1)]
    public int age { get; set; }
    [datamember(order = 2)]
    public int gender { get; set; }
    [datamember(order =3)]
    public list<string> lover { get; set; }
    [datamember(order = 4)]
    public contactaddress address { get; set; }
    [datamember(order = 5)]
    public dictionary<string, string> dailyrecord {
      get; set;
    }
  }
  [datacontract]
  public class contactaddress
  {
    [datamember(order =0)]
    public string province { get; set; }
    [datamember(order = 1)]
    public string city { get; set; }
    [datamember(order = 2)]
    public string country { get; set; }
    [datamember(order = 3)]
    public string details { get; set; }
  }
}

2.json帮助类 核心代码

/// <summary>
/// json转换成对象
/// </summary>
/// <typeparam name="t"></typeparam>
/// <param name="jsontext"></param>
/// <returns></returns>
public static t jsontoobject<t>(string jsontext)
{
  datacontractjsonserializer s = new datacontractjsonserializer(typeof(t));
  memorystream ms = new memorystream(encoding.utf8.getbytes(jsontext));
  t obj = (t)s.readobject(ms);
  ms.dispose();
  return obj;
}
/// <summary>
/// 对象转换成json
/// </summary>
/// <typeparam name="t"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string objecttojson<t>(t obj)
{
  datacontractjsonserializer serializer = new datacontractjsonserializer(typeof(t));
  string result = string.empty;
  using (memorystream ms = new memorystream())
  {
    serializer.writeobject(ms, obj);
    ms.position = 0;
    using (streamreader read = new streamreader(ms))
    {
      result = read.readtoend();
    }
  }
  return result;
}

3.调用

//1.对象-->json
userinfo info = new userinfo
{
    age = 10,
    gender = 1,
    username = "刘德华",
    lover = new list<string> { "美女1", "美女2", "美女3" },
    address = new contactaddress
    {
      province = "湖南省",
      city = "长沙市",
      country = "望城县",
      details = "某旮旯快递找不到的地方"
    },
    dailyrecord = new dictionary<string, string> { { "星期一", "吃饭" }, { "星期二", "洗衣服" }, { "星期三", "好事情" } }
};
string json = objecttojson<userinfo>(info);

4.反序列化后的结果

复制代码 代码如下:
{"username":"刘德华","age":10,"gender":1,"lover":["美女1","美女2","美女3"],"address":{"province":"湖南省","city":"长沙市","country":"望城县","details":"某旮旯快递找不到的地方"},"dailyrecord":[{"key":"星期一","value":"吃饭"},{"key":"星期二","value":"洗衣服"},{"key":"星期三","value":"好事情"}]}

ps:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用:

在线json代码检验、检验、美化、格式化工具:

json在线格式化工具:

在线xml/json互相转换工具:

json代码在线格式化/美化/压缩/编辑/转换工具:

在线json压缩/转义工具:

更多关于c#相关内容还可查看本站专题:《c#字符串操作技巧总结》、《c#常见控件用法教程》、《winform控件用法总结》、《c#程序设计之线程使用技巧总结》、《c#中xml文件操作技巧汇总》、《c#数据结构与算法教程》、《c#数组操作技巧总结》及《c#面向对象程序设计入门教程

希望本文所述对大家c#程序设计有所帮助。