c# - 如何序列化成嵌套在其他对象中的 JSON 对象?
问题描述
我有两个对象,第一个具有第二个的实例作为属性。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public PhoneNumber PhoneNumber { get; set; }
}
public class PhoneNumber
{
public int DialingCode { get; set; }
public int AreaCode { get; set; }
public int FirstThree { get; set; }
public int LastFour { get; set; }
}
我的目标是使用 Newtonsoft.Json 将我的Person
类序列化为 JSON 字符串,其中PhoneNumber
Property 也被序列化,如下所示:
"Person": {
"FirstName": "String",
"LastName": "String",
"Age": "Int",
"PhoneNumber": {
"DialingCode": "Int",
"AreaCode": "Int",
"FirstThree": "Int",
"LastFour": "Int"
}
}
但是我遇到了一个障碍,我正在使用的 JsonConverter 仅序列化Person
对象,并且代替PhoneNumber
Property 仅显示对象的名称,如下所示:
"Person": {
"FirstName": "String",
"LastName": "String",
"Age": "Int",
"PhoneNumber": "PhoneNumber"
}
下面是我的自定义 JsonSerializer 的代码:
public class CustomJsonConverter : JsonConverter
{
private readonly Type[] _types;
public CustomJsonConverter(params Type[] types)
{
_types = types;
}
public override bool CanConvert(Type objectType)
{
return _types.Any(t => t == objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
{
serializer.Serialize(writer, null);
return;
}
var properties = value.GetType().GetProperties();
writer.WriteStartObject();
foreach (var property in properties)
{
writer.WritePropertyName(property.Name);
var propertyName = property.PropertyType.Name == "Int32" ? "Int" : property.PropertyType.Name;
serializer.Serialize(writer, propertyName);
}
writer.WriteEndObject();
}
}
有什么方法可以序列化一个对象,以及其中包含的所有对象吗?
解决方案
实际上,您只需一次调用即可将其序列化
var json = JsonConvert.SerializeObject(person);
仅此而已。
推荐阅读
- javascript - 通过内存转储序列化对象实例
- excel - 自定义 Excel VBA 重置值的奇怪问题
- azure-devops - 如何在 Azure DevOps 中自动将工件提升到提要视图?
- sql - 使用窗口函数根据时间搜索行
- sql - SQL Server 从 3 列中选择最小日期
- binary - 评估 0xfb-0xfa
- visual-studio - 无法添加 TFS 服务器:“找不到方法:'Void Microsoft.VisualStudio.Services.Common.IssuedTokenCredential.set_TokenStorageUrl(System.Uri)'”
- c++ - Q3DSurface:半透明 QSurface3DSeries
- c# - 如何使用 Web API(cs 或 asp.net)调用 Powershell 脚本
- angularjs - ta-insert-video 嵌入视频,无重定向