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

C# 如何在json结果中格式化自定义类型?,c#,json,asp.net-web-api,asp.net-web-api2,C#,Json,Asp.net Web Api,Asp.net Web Api2,我有一个自定义类,基本上可以归结为: public class MyValue { public MyValue(int v) { Value = v; } public int Value {get;} } 我使用这个类作为各种类的属性。当我的API返回一个类(它有一个MyValue属性)时,返回的json如下所示: "propertyOfTypeMyValue": { "value": 4 } 我不要这个。我希望返回的json如下

我有一个自定义类,基本上可以归结为:

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

    public int Value {get;}
}
我使用这个类作为各种类的属性。当我的API返回一个类(它有一个
MyValue
属性)时,返回的json如下所示:

"propertyOfTypeMyValue": {
    "value": 4
}
我不要这个。我希望返回的json如下所示:

"propertyOfTypeMyValue": 4
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);
    }
}

这可能吗?如果是,如何实现?

是的,可以通过如下方式为
MyValue
类创建自定义来获得所需的输出:

"propertyOfTypeMyValue": 4
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
类:

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

    public int Value { get; private set; }
}

这是一个工作演示:

您可以使用自定义转换器: