json 常用的序列化 反序列化对象 代码
序列化对象:
----------------------------------------------------------
Person p = new Person()
{
Name = "Hexiang",
Birthday = DateTime.Parse("2017-02-20 14:30:00"),
Gender = "男",
Love = "Ball"
};
string strJson = JsonConvert.SerializeObject(p, Formatting.Indented);
------------------------------------------------------
序列化字典
Dictionary<string, int> dicPoints = new Dictionary<string, int>(){
{ "James", 9001 },
{ "Jo", 3474 },
{ "Jess", 11926 }
};
string strJson = JsonConvert.SerializeObject(dicPoints, Formatting.Indented);
------------------------------------
序列化list
List<string> lstGames = new List<string>()
{
"Starcraft",
"Halo",
"Legend of Zelda"
};
string strJson = JsonConvert.SerializeObject(lstGames);
-----------------------------------
序列化到json文件中
Person p = new Person()
{
Name = "Hexiang",
Birthday = DateTime.Parse("2017-02-20 14:30:00"),
Gender = "男",
Love = "Ball"
};
using (StreamWriter file = File.CreateText(@"d:\person.json"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, p);
}
--------------------------------
序列化 枚举
List<StringComparison> stringComparisons = new List<StringComparison>
{
StringComparison.CurrentCulture,
StringComparison.Ordinal
};
string jsonWithoutConverter = JsonConvert.SerializeObject(stringComparisons);
this.txtJson.Text = jsonWithoutConverter;//序列化出来是枚举所代表的整数值
string jsonWithConverter = JsonConvert.SerializeObject(stringComparisons, new StringEnumConverter());
this.txtJson.Text += "\r\n";
this.txtJson.Text += jsonWithConverter;//序列化出来是枚举所代表的文本值
// ["CurrentCulture","Ordinal"]
List<StringComparison> newStringComparsions = JsonConvert.DeserializeObject<List<StringComparison>>(
jsonWithConverter,
new StringEnumConverter());
-------------------------------------
序列化dataset
string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
-------------------------------
序列化jrow
JavaScriptSettings settings = new JavaScriptSettings
{
OnLoadFunction = new JRaw("OnLoad"),
OnUnloadFunction = new JRaw("function(e) { alert(e); }")
};
string json = JsonConvert.SerializeObject(settings, Formatting.Indented);
-----------------------
反序列化list
string json = @"['Starcraft','Halo','Legend of Zelda']";
List<string> videogames = JsonConvert.DeserializeObject<List<string>>(json);
this.txtJson.Text = string.Join(", ", videogames.ToArray());
---------------------------------
反序列化字典
string json = @"{
'href': '/account/login.aspx',
'target': '_blank'
}";
Dictionary<string, string> dicAttributes = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
this.txtJson.Text = dicAttributes["href"];
this.txtJson.Text += "\r\n";
this.txtJson.Text += dicAttributes["target"];
--------------------------------
反序列化匿名类
var definition = new { Name = "" };
string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);
this.txtJson.Text = customer1.Name;
this.txtJson.Text += "\r\n";
string json2 = @"{'Name':'Mike'}";
var customer2 = JsonConvert.DeserializeAnonymousType(json2, definition);
this.txtJson.Text += customer2.Name;
--------------------------------------------
反序列化dataset
string json = @"{
'Table1': [
{
'id': 0,
'item': 'item 0'
},
{
'id': 1,
'item': 'item 1'
}
]
}";
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
-----------------------------------------
从文件中反序列化对象
using (StreamReader file = File.OpenText(@"d:\person.json"))
{
JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(file, typeof(Person));
this.txtJson.Text = p.Name;
}
----------------------------------------------------
反序列化有构造函数的对象
string json = @"{'Url':'http://www.google.com'}";
//直接序列化会报错,需要设置JsonSerializerSettings中ConstructorHandling才可以。
Website website = JsonConvert.DeserializeObject<Website>(json, new JsonSerializerSettings
{
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
});
this.txtJson.Text = website.Url;
------------------------------------------
反序列化对象,如果有构造函数中,创建对象,则用Json的进行替换
//
string json = @"{
'Name': 'James',
'Offices': [
'Auckland',
'Wellington',
'Christchurch'
]
}";
UserViewModel model1 = JsonConvert.DeserializeObject<UserViewModel>(json);
this.txtJson.Text = string.Join(",", model1.Offices);//默认会重复
this.txtJson.Text += "\r\n";
//每次从Json中创建新的对象
UserViewModel model2 = JsonConvert.DeserializeObject<UserViewModel>(json, new JsonSerializerSettings
{
ObjectCreationHandling = ObjectCreationHandling.Replace
});
this.txtJson.Text = string.Join(",", model2.Offices);
--------------------------------------
序列化对象的时候去掉没有赋值 的属性
Person person = new Person();
string jsonIncludeDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented);
this.txtJson.Text=(jsonIncludeDefaultValues);//默认的序列化,带不赋值的属性
this.txtJson.Text += "\r\n";
string jsonIgnoreDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore //去掉不赋值的属性
});
this.txtJson.Text+=(jsonIgnoreDefaultValues);
-----------------------------------------------------------------------
反序列化类中没有对应对属性 处理方法
string json = @"{
'FullName': 'Dan Deleted',
'Deleted': true,
'DeletedDate': '2013-01-20T00:00:00'
}";
try
{
JsonConvert.DeserializeObject<Account>(json, new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error //要么忽略,要么报错
});
}
catch (JsonSerializationException ex)
{
this.txtJson.Text=(ex.Message);
// Could not find member 'DeletedDate' on object of type 'Account'. Path 'DeletedDate', line 4, position 23.
}
---------------------------------------------------------
去掉null值的序列化对象
Person person = new Person
{
Name = "Nigal Newborn"
};
//默认的序列化
string jsonIncludeNullValues = JsonConvert.SerializeObject(person, Formatting.Indented);
this.txtJson.Text=(jsonIncludeNullValues);
this.txtJson.Text += "\r\n";
//去掉Null值的序列化
string jsonIgnoreNullValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore //可以忽略,可以包含
});
this.txtJson.Text+=(jsonIgnoreNullValues);
-----------------------------
序列化的时候日期的格式化
DateTime mayanEndOfTheWorld = new DateTime(2012, 12, 21);
string jsonIsoDate = JsonConvert.SerializeObject(mayanEndOfTheWorld);
this.txtJson.Text = (jsonIsoDate);
this.txtJson.Text += "\r\n";
string jsonMsDate = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
});
this.txtJson.Text += (jsonMsDate);
// "\/Date(1356044400000+0100)\/"
this.txtJson.Text += "\r\n";
string json = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd",
Formatting = Formatting.Indented
});
this.txtJson.Text += json;
----------------------------
序列化设置时区
Flight flight = new Flight
{
Destination = "Dubai",
DepartureDate = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Unspecified),
DepartureDateUtc = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Utc),
DepartureDateLocal = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Local),
Duration = TimeSpan.FromHours(5.5)
};
string jsonWithRoundtripTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
});
this.txtJson.Text=(jsonWithRoundtripTimeZone);
this.txtJson.Text += "\r\n";
string jsonWithLocalTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local
});
this.txtJson.Text+=(jsonWithLocalTimeZone);
this.txtJson.Text += "\r\n";
string jsonWithUtcTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
});
this.txtJson.Text += (jsonWithUtcTimeZone);
this.txtJson.Text += "\r\n";
string jsonWithUnspecifiedTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Unspecified
});
this.txtJson.Text += (jsonWithUnspecifiedTimeZone);
---------------------------------------
序列化默认设置
// settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Person s = new Person()
{
Name = "Eric",
Birthday = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc),
Gender = "男",
Love = "Web Dude"
};
string json = JsonConvert.SerializeObject(s);
this.txtJson.Text = json;
-----------------------------------------
序列化ImmutableList
//ImmutableList<string> l = ImmutableList.CreateRange(new List<string>
// {
// "One",
// "II",
// "3"
// });
//string json = JsonConvert.SerializeObject(l, Formatting.Indented);
-------------------------------------------------
----------------------------------------
最新文章
- 解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客 http://hsj69106.blog.51cto.com/1017401/595598/
- CentOS学习笔记--防火墙iptables
- LightOJ 1245 Harmonic Number (II)(找规律)
- vmware虚拟机上网:NAT搭建局域网
- php如何计算两个时间戳之间相差的日时分秒
- 带你轻松玩转Git--图解三区结构
- POJ3061 Subsequence(二进制前缀和法律+仿真足)
- SD卡初始化以及命令详解
- Python之路-awk文本处理
- Python面向对象编程(三)
- oracle中事务处理--事务隔离级别
- print_r print var_dump echo区别
- 查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等
- Python爬虫的学习经历
- visual studio发布到远程服务器的IIS
- Linux共享库LD_LIBRARY_PATH与ld.so.conf
- Eclipse中打包maven项目-war包方式
- spark优化之并行度
- js 获取地址栏最后一个文件名称
- tomcat如何配置启动时自动部署webapps下的war包
热门文章
- MySQL的启动和关闭
- iframe初始化属性
- .Net Core 全球化&;本地化的使用
- openlayers空间点查询之GetFeatureInfo
- P3110 [USACO14DEC]驮运Piggy Back
- eureka 和zookeeper 区别 优势【转】
- Hadoop 学习路线
- 快排+java实现
- linux例行性任务(定时作业)
- [jshint] &#39;import&#39; is only available in ES6 (use &#39;esversion: 6&#39;). (W119) 提示import等ES6语法的jshint错误的,在代码前加一行 /* jshint esversion: 6 */