首页 > 解决方案 > 如何序列化成嵌套在其他对象中的 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 字符串,其中PhoneNumberProperty 也被序列化,如下所示:

"Person": {
    "FirstName": "String",
    "LastName": "String",
    "Age": "Int",
    "PhoneNumber": {
        "DialingCode": "Int",
        "AreaCode": "Int",
        "FirstThree": "Int",
        "LastFour": "Int"
    }
}

但是我遇到了一个障碍,我正在使用的 JsonConverter 仅序列化Person对象,并且代替PhoneNumberProperty 仅显示对象的名称,如下所示:

"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();
    }
}

有什么方法可以序列化一个对象,以及其中包含的所有对象吗?

标签: c#jsonjson.net

解决方案


实际上,您只需一次调用即可将其序列化

var json = JsonConvert.SerializeObject(person);

仅此而已。


推荐阅读