如何在 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
我有一个习惯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