方式一: 使用于 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

最新文章

  1. Application package &#39;AndroidManifest.xml&#39; must have a minimum of 2 segments.
  2. spring源码分析之spring-web remoting模块概况及基本概念
  3. 第二章 D - Number Sequence(1.5.10)
  4. Spring 事务配置5种方式
  5. 【JSONCpp】简介及demo
  6. C,C++,使得控制台的黑框框全屏显示
  7. SQL Server DAC 管理员专用连接
  8. honeywell D6110开发的一个工厂仓库追溯识别
  9. 记hive select distinct 多列 误区一则
  10. ubuntu eclipse 建立server 提示coud not load the tomcat server configuration at /opt/apache ...的解决方法
  11. c语言第二次作业2
  12. Tomcat中定制阀门
  13. 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK
  14. Mac使用
  15. linux 操作 json文件
  16. 5.Python3程序结构
  17. 对象函数的readFileSyc类
  18. xamarin.android 实现 Activity 底部弹出对话框菜单
  19. PAT 甲级 1155 Heap Paths
  20. Web Service——CXF+Spring 整合

热门文章

  1. linux执行python的脚本文件,提示提示No such file or directory
  2. ThinkPHP5 远程代码执行漏洞被入侵日志,升级最新版本解决
  3. PSP耗时
  4. AI之旅(2):初识线性回归
  5. Unity中对系统类进行扩展的方法
  6. python 11
  7. libpointmatcher安装和使用
  8. (转)python中函数参数中如果带有默认参数list的特殊情况
  9. [工作积累] TAA Ghosting 的相关问题
  10. python入门——热量转换 I