一、JSON使用JsonPropertyAttribute重命名属性名
1.先创建一个Movie对象,然后在其属性上添加JsonProperty,并指定重命名的名称。注意:属性Name和Director已指定。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Movie
- {
- [JsonProperty("name")]
- public string Name { get; set; }
-
- [JsonProperty("Chinese Director")]
- public string Director { get; set; }
-
- public int ReleaseYear { get; set; }
- }
- }
2.实例化Movie对象,然后序列化。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using GongHuiNewtonsoft.Json;
- using GongHuiNewtonsoft.Json.Serialization;
- using GongHuiNewtonsoft.Json.Converters;
-
- namespace JSONDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Movie m = new Movie
- {
- Name = "非诚勿扰1",
- Director = "冯小刚",
- ReleaseYear = 2008
- };
-
- string json = JsonConvert.SerializeObject(m, Formatting.Indented);
- Console.WriteLine(json);
- }
- }
- }
3.运行结果,注意:属性ReleaseYear未被重命名。

二、JSON使用JsonPropertyAttribute序列化升序排序属性
1.先创建一个Movie对象,然后指定JsonProperty,并添加Order属性。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Movie
- {
- [JsonProperty(Order=4)]
- public string Name { get; set; }
-
- [JsonProperty(Order=0)]
- public string Director { get; set; }
-
- public int ReleaseYear { get; set; }
-
- [JsonProperty(Order=-3)]
- public string ChiefActor { get; set; }
-
- [JsonProperty(Order=2)]
- public string ChiefActress { get; set; }
- }
- }
2.实例化Movie对象,然后序列化。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using GongHuiNewtonsoft.Json;
- using GongHuiNewtonsoft.Json.Serialization;
- using GongHuiNewtonsoft.Json.Converters;
-
- namespace JSONDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Movie m = new Movie
- {
- Name = "非诚勿扰1",
- Director = "冯小刚",
- ReleaseYear = 2008,
- ChiefActor="葛优",
- ChiefActress="舒淇"
- };
-
- string json = JsonConvert.SerializeObject(m, Formatting.Indented);
- Console.WriteLine(json);
- }
- }
- }
3.运行结果。注意:未指定Order序号的属性,界定于大于负数小于正数,并按默认顺序排序。

三、JSON使用JsonPropertyAttribute反序列化属性时,Required指定属性性质
1.创建一个Movie对象,给属性添加JsonProperty,并指定其Required的性质。属性Name必须有值,DateTime可以为空.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Movie
- {
- [JsonProperty(Required=Required.Always)]
- public string Name { get; set; }
-
- [JsonProperty(Required = Required.AllowNull)]
- public DateTime? ReleaseDate { get; set; }
-
- public string Director { get; set; }
- }
- }
2.实例化Movie对象,反序列化JSON。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using GongHuiNewtonsoft.Json;
- using GongHuiNewtonsoft.Json.Serialization;
- using GongHuiNewtonsoft.Json.Converters;
-
- namespace JSONDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- string json = @"{
- 'Name':'举起手来1',
- 'Director':'冯小宁',
- 'ReleaseDate':null
- }";
-
- Movie m = JsonConvert.DeserializeObject<Movie>(json);
- Console.WriteLine(m.Name);
- Console.WriteLine(m.Director);
- Console.WriteLine(m.ReleaseDate);
- }
- }
- }
3.运行结果是

四、JSON使用JsonPropertyAttribute序列化引用类型集合
1.创建一个Director对象,并声明一个本身类型的属性,指定JsonProperty中的IsReference为true.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Director
- {
- public string Name { get; set; }
-
- [JsonProperty(IsReference=true)]
- public Director ExecuteDir { get; set; }
- }
- }
2.创建一个Movie对象,声明一个Director集合的属性,指定JsonProperty中的IsReference为true.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Movie
- {
- public string Name { get; set; }
-
- [JsonProperty(ItemIsReference=true)]
- public IList<Director> Directors { get; set; }
- }
- }
3.序列化对象
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using GongHuiNewtonsoft.Json;
- using GongHuiNewtonsoft.Json.Serialization;
- using GongHuiNewtonsoft.Json.Converters;
-
- namespace JSONDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Director dir = new Director
- {
- Name = "冯小刚"
- };
-
- Director dir1 = new Director
- {
- Name = "张艺谋",
- ExecuteDir = dir
- };
-
- Movie m = new Movie
- {
- Name = "满城尽带黄金甲",
- Directors = new List<Director>
- {
- dir,
- dir1
- }
- };
-
- string json = JsonConvert.SerializeObject(m, Formatting.Indented);
- Console.WriteLine(json);
- }
- }
- }
4.运行结果

五、JSON使用JsonPropertyAttribute序列化忽略属性null
1.创建一个Movie对象,并在属性上指定JsonProperty,添加NullValueHandling,忽略null
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using GongHuiNewtonsoft.Json;
-
- namespace JSONDemo
- {
- public class Movie
- {
- public string Name { get; set; }
-
- public string Director { get; set; }
-
- [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
- public DateTime? LaunchDate { get; set; }
- }
- }
2.实例化对象Movie对象,然后序列化
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using GongHuiNewtonsoft.Json;
- using GongHuiNewtonsoft.Json.Serialization;
- using GongHuiNewtonsoft.Json.Converters;
-
- namespace JSONDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Movie m = new Movie
- {
- Name = "爱情呼叫转移",
- Director = "张建亚"
- };
-
- string json = JsonConvert.SerializeObject(m, Formatting.Indented);
- Console.WriteLine(json);
- }
- }
- }
3.运行的结果

适用于现代 C++ 的 JSON。
最近提交(Master分支:4 个月前 )
f06604fc
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <niels.lohmann@gmail.com>
---------
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
Signed-off-by: Niels Lohmann <niels.lohmann@gmail.com> 1 个月前
d23291ba
* add a ci step for Json_Diagnostic_Positions
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* Update ci.cmake to address review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* address review comment
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix typo in the comment
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix typos in ci.cmake
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* invoke the new ci step from ubuntu.yml
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* issue4561 - use diagnostic positions for exceptions
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_documentation check
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* address review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci check failures for unit-diagnostic-postions.cpp
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* improvements based on review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix const correctness string
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* further refinements based on reviews
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* add one more test case for full coverage
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* ci check fix - add const
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* add unit tests for json_diagnostic_postions only
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_diagnostics
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_build_documentation check
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
---------
Signed-off-by: Harinath Nampally <harinath922@gmail.com> 1 个月前
旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
所有评论(0)