方式一: 使用于 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相互转换.的更多相关文章

  1. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  2. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  3. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  4. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  5. C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案

    C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案 xml序列化涉及到XmlRoot,XmlInclude,XmlElement,XmlAttribute,XmlType ...

  6. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  7. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  8. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  9. C# JSON 序列化和反序列化——JavaScriptSerializer实现

    一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...

随机推荐

  1. jQuery图片自动添加水印插件

    JS脚本(jQuery)为图片加水印效果预览:http://hovertree.com/texiao/jquery/94/ 本功能使用HTML5实现,可为图片加上文字水印,可设置文字,设置颜色,位置等 ...

  2. 学习笔记:spark Streaming的入门

    spark Streaming的入门 1.概述 spark streaming 是spark core api的一个扩展,可实现实时数据的可扩展,高吞吐量,容错流处理. 从上图可以看出,数据可以有很多 ...

  3. mysql数据库 事务和索引

    1.MySQL数据库特性:  原子性(atomidity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一 ...

  4. SQLI DUMB SERIES-18

    (1)对username和password无论怎么输入,都没有回显,再看题目,POST - Header Injection - Uagent field - Error based (基于错误的用户 ...

  5. python_ 基本语法

    一.基础知识: 1.鸡汤 摘抄至 :简明 python 教程 在人生中取得成功,与其说靠天才与机会,不如说靠专注与毅力! Python 特点:简单.易于学习(简单得语法体系).自由且开发.高级语言.跨 ...

  6. 6th week blog(2)

    fixed:元素将从常规文档流中删除,并且不会为页面布局中的元素创建任何空间.它的位置相对于初始位置.它允许框架样式布局.在页式媒体如打印输出中,一个固定元素会出现于第一页的相同位置.这可以用来创建一 ...

  7. 关于 API

    1. API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访 ...

  8. C# DES加密类,16位的加密。

    这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题. 可以直接调用里面的加密和解密的方法. using System; using System. ...

  9. nginx日志分割

    mark 参考文章: https://blog.csdn.net/molaifeng/article/details/82667158

  10. Matlab 2017b遇到绘图低级错误

    解决方案: 命令窗口中输入:opengl('save','software') 回车 重启软件