序列化 - C#数据类型

时间:2018-02-21 15:19:18

标签: c# json serialization

我有一个我希望序列化为JSON的对象,但是不是每个属性都有相关的值,而是让每个属性都有相关的类型。

例如,我有以下课程:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public bool IsMarried { get; set; }
}

我希望得到的JSON看起来像这样

{
    "Student:" {
       "Name": "String",
       "Age": "Int",
       "DateOfBirth": "DateTime",
       "IsMarried": "Boolean"
    }
}

我有没有办法设置JsonSerializer来序列化每个属性type而不是value

1 个答案:

答案 0 :(得分:2)

使用this答案中的信息构建自定义JsonSerializer,您可以修改WriteJson方法以指定要编写的信息。

构建自定义JsonSerializer需要创建一个新类并从JsonSerializer派生它,然后覆盖您有兴趣自定义的任何方法。

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)
    {
        // Write the property name
        writer.WritePropertyName(property.Name);
        // Get the value of the property and get the type
        serializer.Serialize(writer, property.GetValue(value, null).GetType());
    }

    writer.WriteEndObject();
}