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; }
}
这是一个工作演示:您可以使用自定义转换器: