如何在 json 结果中格式化自定义类型?

How to format a custom type in the json result?

我有一个习惯class,基本上可以归结为:

public class MyValue
{
    public MyValue(int v)
    {
        Value = v;
    }

    public int Value {get;}
}

我在各种 class 上将此 class 用作 属性。当我的 API returns 一个 class (它有一个 MyValue 属性)时,返回的 json 看起来像:

"propertyOfTypeMyValue": {
    "value": 4
}

我不想要这个。我想要的是返回的 json 看起来像这样:

"propertyOfTypeMyValue": 4

这可能吗?如果是,怎么做?

是的,可以通过为您的 MyValue class 创建自定义 JsonConverter 来获得您想要的输出,如下所示:

public class MyValueConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(MyValue);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null) 
            return null;
        if (reader.TokenType == JsonToken.Integer) 
            return new MyValue(Convert.ToInt32(reader.Value));
        throw new JsonException("Unexpected token type: " + reader.TokenType);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((MyValue)value).Value);
    }
}

要使用转换器,请使用 [JsonConverter] 属性标记 MyValue class:

[JsonConverter(typeof(MyValueConverter))]
public class MyValue
{
    public MyValue(int v)
    {
        Value = v;
    }

    public int Value { get; private set; }
}

这是一个工作演示:https://dotnetfiddle.net/A4eU87