我有一个自定义类,基本上可以归结为:
public class MyValue
{
public MyValue(int v)
{
Value = v;
}
public int Value {get;}
}
我将此类用作各种类的属性。当我的API返回一个类(具有MyValue
属性)时,返回的json如下:
"propertyOfTypeMyValue": {
"value": 4
}
我不要这个。我想要的是返回的json看起来像这样:
"propertyOfTypeMyValue": 4
这可能吗?如果是这样,如何?
我有类似的需求,对于像您这样的情况,我使用基元,字符串,而对于嵌套项目,我使用不同的类:
public class Test
{
public string userName { get; set; }
public string password { get; set; }
//NESTED ITEMS
public NestedModel recipient { get; set; }
public class NestedModel
{
public string clientName { get; set; }
public string email { get; set; }
}
}
因此,基于此类的json看起来像
{
"username": "test",
"password ": "test",
"recipient": {
"clientName ": "client",
"email": "[email protected]",
}
}
希望有帮助
是的,您可以通过为JsonConverter
类创建自定义MyValue
来获得所需的输出,如下所示:
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
属性标记您的[JsonConverter]
类:
[JsonConverter(typeof(MyValueConverter))]
public class MyValue
{
public MyValue(int v)
{
Value = v;
}
public int Value { get; }
}
就是这样。它应该“正常工作”。