JSON 序列化与反序列化, 与XML相互转换.
方式一: 使用于 JavaScriptSerializer类
适用于普通场景, Excel导入导出, 前台传输查询参数直接处理等.
JavaScriptSerializer serializer = new
JavaScriptSerializer();
serializer.MaxJsonLength = int.MaxValue;
var qp = serializer.Deserialize<QueryP>(queryP);
private class QueryP
{
public string OrgID { get; set; }
public string KeyWords { get; set; }
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
var gridHeaders = serializer.Deserialize<List<grid>>(GridHeaders);
/// <summary>
/// grid表头
/// </summary>
[Serializable]
public class grid
{
public string Text { get; set; }
public string DataIndex { get; set; }
public string Width { get; set; }
public List<grid> Cols { get; set; }
public bool Hiden { get; set; }
public string xtype { get; set; }
public string DataType { get; set; }//列类型
}
方式二: (不推荐使用DataContractJsonSerializer) 功能较多, 仅放一个例子, 不深入研究, 因为开源第三种方式不仅功能多, 性能还强.
//Person实体中的契约 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的
//使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
static void Main(string[] args)
{
//序列化操作
Person p1 = new Person()
{
name = "fxhl",
age = 23
};
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));
MemoryStream msObj = new MemoryStream();
//将序列化之后的Json格式数据写入流中
js.WriteObject(msObj, p1);
//从0这个位置开始读取流中的数据
msObj.Position = 0;
StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
string json = sr.ReadToEnd();
Console.WriteLine(json);
sr.Close();
msObj.Close();
//反序列化操作
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Person));
Person model = (Person)deseralizer.ReadObject(ms);// //反序列化ReadObject
Console.WriteLine(model.name);
}
Console.ReadKey();
}
}
[DataContract]
public class Person
{
[DataMember]
public string name { get; set; }
[DataMember]
public int age { get; set; }
}
方式三: 引入 Newtonsoft.Json 使用.
拓展方法使用, 可以直接使用.
public static T DeserializeModel<T>(this T model, string json)
{
try
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
}
catch (Exception)
{
return model;
}
}
public static T DeserializeModel<T>(this T model, DataTable dt)
{
try
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(Newtonsoft.Json.JsonConvert.SerializeObject(dt));
}
catch (Exception)
{
return model;
}
}
public static T DeserializeJSON<T>(this string json) where T : new()
{
try
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>((json));
}
catch (Exception)
{
return new T();
}
}
public static string SerializeModel(this object model)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(model);
}
public static List<T> NMList<T>(this T model)// where T:new()
{
var L = new List<T>();
return L;
}
public static Hashtable NMToHashTable<T>(this T model)
{
var ht = new Hashtable();
foreach (var f in model.GetType().GetProperties())
{
ht[f.Name] = f.GetValue(model, new object[] { });
}
return ht;
}
支持属性转译 和忽略字段.
JsonIgnore 注解 和 PropertyName 注解等.
public class AuditModel
{
[JsonProperty(PropertyName = "checked", NullValueHandling = NullValueHandling.Ignore)]
public string SuccessMsg { get; set; }
[JsonIgnore]
public HttpRequestBase context { get; set; }
最后, 利用Json.NET 完成Json到Xml 的转换:(完成的xml传输到数据库. 数据库根据/root 取相应执行逻辑)
string JsonTOXml(string json, string modelName)
{
string _json = @"{
""?xml"": {
""@version"": ""1.0"",
""@standalone"": ""no""
},
""root"": {
""modelName"": " + json + @"
}
}";
_json = _json.Replace("modelName", modelName);
return Newtonsoft.Json.JsonConvert.DeserializeXmlNode(_json).OuterXml;
}
其他优秀博客可参考:
https://www.cnblogs.com/fengxuehuanlin/p/5700282.html
http://www.cnblogs.com/yunfeifei/p/4086014.html
https://blog.csdn.net/WuLex/article/details/83026080
http://www.cnblogs.com/wuhuacong/p/3698122.html
JSON 序列化与反序列化, 与XML相互转换.的更多相关文章
- windows phone8.1:Xml,Json序列化和反序列化
原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案
C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案 xml序列化涉及到XmlRoot,XmlInclude,XmlElement,XmlAttribute,XmlType ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- C# JSON 序列化和反序列化——JavaScriptSerializer实现
一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...
随机推荐
- WEB学习笔记11-高可读性的HTML之如何设置网页标题层级
标题标签指的是<h1>~<h6>这6个标签,统称为<hx>标签. (1)在页面内容的标题部分使用<hx>标签 <h1 class="re ...
- IntelliJ常用快捷键及配置
IntelliJ常用快捷键及配置 目录: 1.常用快捷键: 2.常用配置: 1.常用快捷键: (1)psvm:创建main函数 (2)fori:for (int i = 0; i < ; i++ ...
- useradd和groupadd(Linux创建用户\用户组\设置\分配用户权限\多用户远程登录权限)的使用
前言: man useradd man groupadd info useradd info groupadd 都可以获取相关命令的用法信息. 个人比较喜欢读英文解释文档,没有你想象的那么comp ...
- 技术笔记1:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password)
在myEclipse10中运行java项目的时候,遇到java.sql.SQLException: Access denied for user 'root'@'localhost' (using p ...
- app内嵌vue h5,安卓和ios拦截H5点击事件
安卓和ios拦截h5点击事件,这个函数事件必须是暴漏在window下的 安卓和ios拦截普通h5函数: <div onclick = "show(),window.android.sh ...
- java-递归练习
1.从键盘接收一个文件夹路径,统计该文件夹大小 public class Test1 { /** * @param args * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 * * 从键盘接 ...
- Zend studio快捷键使用
应用场景 快捷键 功能 查看快捷键 ctrl+shift+l 显示所有快捷键列表 查看和修改快捷键 打开Window->Preferences->General->keys 修改 ...
- Azure monitor Portal 、Azure monitor API监控指标、性能监视器常用指标
- creator Box2d的相关物理问题
项目的屏幕配置为 1152*640,没有对这个数值调整来测试质量的除数1024会不会变化 m = h * w / 1024 (m 质量,h 物体高度,w 物体宽度) g = 0, -320 ( ( ...
- java8_api_io
IO-1 i/o的概念 File类详解 java.io.File java.io.FileFilter接口 只有一个方法 这是一个函数式接口 ...