C#中java如何实现序列化Json序列化与反序列化的几种方式

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
string s="{"size":15,"query":{"match":{"data.query.match.promotionInfo.query":{"boost":1.3,"type":"phrase","query":"销售1"}}}}";
var o = JsonConvert.DeserializeObject&dynamic&(s);
//data.query.match.promotionInfo.query 需处理掉 "."
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
/// &summary&
/// 自定义序列化和反序列化转换器
/// &/summary&
public class CustomJsonConverter : JsonConverter
/// &summary&
/// 用指定的值替换空值NULL
/// &/summary&
public object PropertyNullValueReplaceValue { }
/// &summary&
/// 属性名称命名规则约定
/// &/summary&
public ConverterPropertyNameCase PropertyNameCase { }
/// &summary&
/// 自定义属性名称映射规则
/// &/summary&
public Func&string, string& ProperyNameConverter { }
/// &summary&
/// 从字符流读取对象
/// &/summary&
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
using (JTokenWriter writer = new JTokenWriter())
JsonReaderToJsonWriter(reader, writer);
return writer.Token.ToObject(objectType);
/// &summary&
/// 通过对象写字符流
/// &/summary&
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
JObject jobject = JObject.FromObject(value);
JsonReader reader = jobject.CreateReader();
JsonReaderToJsonWriter(reader, writer);
public void JsonReaderToJsonWriter(JsonReader reader, JsonWriter writer)
switch (reader.TokenType)
case JsonToken.None:
case JsonToken.StartObject:
writer.WriteStartObject();
case JsonToken.StartArray:
writer.WriteStartArray();
case JsonToken.PropertyName:
string propertyName = reader.Value.ToString();
writer.WritePropertyName(ConvertPropertyName(propertyName));
case JsonToken.Comment:
writer.WriteComment((reader.Value != null) ? reader.Value.ToString() : null);
case JsonToken.Integer:
writer.WriteValue(Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));
case JsonToken.Float:
object value = reader.V
if (value is decimal)
writer.WriteValue((decimal)value);
else if (value is double)
writer.WriteValue((double)value);
else if (value is float)
writer.WriteValue((float)value);
writer.WriteValue(Convert.ToDouble(value, CultureInfo.InvariantCulture));
case JsonToken.String:
writer.WriteValue(reader.Value.ToString());
case JsonToken.Boolean:
writer.WriteValue(Convert.ToBoolean(reader.Value, CultureInfo.InvariantCulture));
case JsonToken.Null:
if (this.PropertyNullValueReplaceValue != null)
writer.WriteValue(this.PropertyNullValueReplaceValue);
writer.WriteNull();
case JsonToken.Undefined:
writer.WriteUndefined();
case JsonToken.EndObject:
writer.WriteEndObject();
case JsonToken.EndArray:
writer.WriteEndArray();
case JsonToken.EndConstructor:
writer.WriteEndConstructor();
case JsonToken.Date:
if (reader.Value is DateTimeOffset)
writer.WriteValue((DateTimeOffset)reader.Value);
writer.WriteValue(Convert.ToDateTime(reader.Value, CultureInfo.InvariantCulture));
case JsonToken.Raw:
writer.WriteRawValue((reader.Value != null) ? reader.Value.ToString() : null);
case JsonToken.Bytes:
if (reader.Value is Guid)
writer.WriteValue((Guid)reader.Value);
writer.WriteValue((byte[])reader.Value);
} while (reader.Read());
/// &summary&
/// 自定义转换器是否可用
/// &/summary&
public override bool CanConvert(Type objectType)
if (objectType != typeof(DateTime))
/// &summary&
/// 根据外部规则转换属性名
/// &/summary&
private string ConvertPropertyName(string propertyName)
if (this.ProperyNameConverter != null)
propertyName = this.ProperyNameConverter(propertyName);
char[] chars = propertyName.ToCharArray();
switch (this.PropertyNameCase)
case ConverterPropertyNameCase.None:
case ConverterPropertyNameCase.CamelCase:
for (int i = 0; i & chars.L i++)
bool hasNext = (i + 1 & chars.Length);
if (i & 0 && hasNext && !char.IsUpper(chars[i + 1]))
chars[i] = char.ToLower(chars[i], CultureInfo.InvariantCulture);
case ConverterPropertyNameCase.PascalCase:
chars[0] = char.ToUpper(chars.First());
return new string(chars);
/// &summary&
/// 属性命名规则
/// &/summary&
public enum ConverterPropertyNameCase
/// &summary&
/// 默认拼写法(默认首字母)
/// &/summary&
/// &summary&
/// 骆驼拼写法(首字母小写)
/// &/summary&
CamelCase,
/// &summary&
/// 帕斯卡拼写法(首字母大写)
/// &/summary&
PascalCase
var convert = new CustomJsonConverter {ProperyNameConverter = y =& y.Replace('.', '_')};
o = JsonConvert.DeserializeObject&dynamic&(s, convert);
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。JSON(JavaScript Object Notation)——JavaScript对象表示法,是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处理,例如ajax等,是独立于语言和平台的轻量级的数据交换格式。
JSON的数据类型:
number:和JavaScript的number完全一致;
boolean:就是JavaScript的true或false;
string:就是JavaScript的string;
null:就是JavaScript的null;
array:就是JavaScript的Array表示方式——[];
object:就是JavaScript的{ ... }表示方式。
以及上面的任意组合。并且,JSON还定死了字符集必须是UTF-8。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号"",如果JSON中含有转义字符,则需要转义。
1、使用 JavaScriptSerializer类实现序列化
namespace: System.Web.Script.Serialization
1 // 序列化
2 private string ObjectToJson(Person obj)
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Serialize(obj);
7 // 反序列化
8 private Person JsonToObject(string jsonStr)
<span style="color: #
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
<span style="color: #
return jsonSerialize.Deserialize&Person&(jsonStr);
<span style="color: # }
注:可用 [ScriptIgnore]&标记不序列化的属性
2、使用 DataContractJsonSerializer类实现序列化
namespace:System.Runtime.Serialization.Json
1 // 序列化
2 using (MemoryStream stream =new MemoryStream())
DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
jsonSerialize.WriteObject(stream, obj);
jsonStr = Encoding.UTF8.GetString(stream.ToArray());
8 // 反序列化
9 using (MemoryStream stream =new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
<span style="color: # {
<span style="color: #
DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
<span style="color: #
obj = (Person)jsonSerialize.ReadObject(stream);
<span style="color: # }
注:可用 [IgnoreDataMember] 标记不序列化的属性
3、使用开源类库Newtonsoft.Json实现序列化
namespace:Newtonsoft.Json
2 using System.Collections.G
3 using System.D
4 using System.L
5 using System.W
6 using System.Web.UI;
7 using System.Web.UI.WebC
8 using Newtonsoft.J
9 using Newtonsoft.Json.L
<span style="color: #
<span style="color: # namespace DataInterface
<span style="color: # {
<span style="color: #
public partial class UserLogin : System.Web.UI.Page
<span style="color: #
<span style="color: #
protected void Page_Load(object sender, EventArgs e)
<span style="color: #
<span style="color: #
string errMsg = string.E
<span style="color: #
if (Request["JsonString"] != null)
<span style="color: #
<span style="color: #
string jsonString = Request["JsonString"].ToString();
<span style="color: #
<span style="color: #
string userName = string.Empty, password = string.E
<span style="color: #
<span style="color: #
<span style="color: #
array = (JObject)JsonConvert.DeserializeObject(jsonString);
<span style="color: #
userName = array["userName"].ToString().Trim('"');
<span style="color: #
password = array["password"].ToString().Trim('"').ToUpper();
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
errMsg = "传入参数错误";
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: # }
1 string jsonText = string.E
2 StringWriter sw = new StringWriter();
3 JsonWriter writer = new JsonTextWriter(sw);
5 writer.WriteStartObject();
6 writer.WritePropertyName("result");
7 writer.WriteValue("<span style="color: #");
8 writer.WritePropertyName("msg");
9 writer.WriteValue("sucess");
<span style="color: # writer.WriteEndObject();
<span style="color: # writer.Flush();
<span style="color: # jsonText = sw.GetStringBuilder().ToString();
阅读(...) 评论()&>&一个c#的json序列化和反序列化类
一个c#的json序列化和反序列化类
上传大小:921B
一个c#的json序列化和反序列化类,调用很简单
综合评分:3
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有1条
初学者可以参考,学习中!
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
一个c#的json序列化和反序列化类
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
book_bytestream
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
一个c#的json序列化和反序列化类&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
C#中的Json的序列化和反序列化
摘要:Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中。我们在下面实例讲解如何进行Json的序列化和反序列化,本文介绍两种方案,.net3.5原生Json操作和Json.net中的Json操作。首先,我们先建立一个测试对象,用来序列化和反序列化。&publicclassPerson{publicintID{}publicstringName
Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中。我们在下面实例讲解如何进行Json的序列化和反序列化,本文介绍两种方案,.net 3.5原生Json操作和Json.net中的Json操作。
首先,我们先建立一个测试对象,用来序列化和反序列化。
public class Person
public int ID { }
public string Name { }
public int Age { }
public DateTime BirthDay { }
第一种,利用.Net Framework 3.5中原生的Json操作类库,特点就是不需要导入第三方类库,比较方便,速度上一般,而且需要.Net Framework的支持,我们知道现在还有很多服务器没有升级到.Net Framework 3.5,就用不了这个了。
首先导入下面类库,并加入下面代码System.ServiceModelSystem.ServiceModel.Web
class Program
static void Mn(string[] args)
//创建测试对象
Person p = new Person();
p.Name = &张三&;
p.Age = 20;
p.BirthDay = DateTime.Now.AddYears(-20);
//将对象转化成Json字符串
DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Person));
using (MemoryStream ms = new MemoryStream())
ds.WriteObject(ms, p);
string output = Encoding.UTF8.GetString(ms.ToArray());
Console.WriteLine(output);
输出结果这个是.Net Framework 3.5原生的序列化方式,接着,我们介绍反序列化方式,还是同样的加入下面代码
class Program
static void Mn(string[] args)
//创建测试对象
Person p = new Person();
p.Name = &张三&;
p.Age = 20;
p.BirthDay = DateTime.Now.AddYears(-20);
//将对象转化成Json字符串
string output = string.E
DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Person));
using (MemoryStream ms = new MemoryStream())
ds.WriteObject(ms, p);
output = Encoding.UTF8.GetString(ms.ToArray());
//将Json字符串转化成对象
DataContractJsonSerializer outDs = new DataContractJsonSerializer(typeof(Person));
using (MemoryStream outMs = new MemoryStream(Encoding.UTF8.GetBytes(output)))
Person outPerson = outDs.ReadObject(outMs) as P
Console.WriteLine(&ID:& + outPerson.ID);
Console.WriteLine(&Name:& + outPerson.Name);
Console.WriteLine(&Age:& + outPerson.Age);
Console.WriteLine(&Birthday:& + outPerson.BirthDay);
我们从.Net Framework 3.5原生的Json序列化及反序列化方式中,可以看出,还是相当麻烦的。很多网友也会问如果是.Net Framework 2.0该怎么办呢?下面,我们介绍一个第三方的Json序列化和反序列化类库,来完成上面操作,这个类库是有.Net Framework 2.0的版本的哦,而且这个类库还可以支持xml的序列化和反序列化操作(本文不做讲解)。下面看操作。
class Program
static void Mn(string[] args)
//创建测试对象
Person p = new Person();
p.Name = &张三&;
p.Age = 20;
p.BirthDay = DateTime.Now.AddYears(-20);
//将对象转化成Json字符串
string output = JsonConvert.SerializeObject(p);
Console.WriteLine(output);
这个是Json序列化方法,是不是简单了很多呢?
class Program
static void Mn(string[] args)
//创建测试对象
Person p = new Person();
p.Name = &张三&;
p.Age = 20;
p.BirthDay = DateTime.Now.AddYears(-20);
//将对象转化成Json字符串
string output = JsonConvert.SerializeObject(p);
//将Json字符串转化成对象
Person outPerson = JsonConvert.DeserializeObject&Person&(output);
Console.WriteLine(&ID:& + outPerson.ID);
Console.WriteLine(&Name:& + outPerson.Name);
Console.WriteLine(&Age:& + outPerson.Age);
Console.WriteLine(&Birthday:& + outPerson.BirthDay);
这个是Json反序列化方法,简单吧,而且据说这个类库的速度比.Net原生的Json序列化和反序列化方法要快很多。下载地址http://json.codeplex.com/
原创文章,转载请注明: 转载自.NET开发者
本文链接地址: c#中的Json的序列化和反序列化
文章的脚注信息由WordPress的wp-posturl插件自动生成
Related posts:
Javascript中的Json序列化和反序列化
JSON数据格式详解
Json第三方类库Json.Net,声称超过其他Json序列化机制
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
C#中的Json的序列化和反序列化相关信息,包括
的信息,所有C#中的Json的序列化和反序列化相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International

我要回帖

更多关于 idea实现序列化 的文章

 

随机推荐