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

问题描述 投票:1回答:2

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

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

    public int Value {get;}
}

我将此类用作各种类的属性。当我的API返回一个类(具有MyValue属性)时,返回的json如下:

"propertyOfTypeMyValue": {
    "value": 4
}

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

"propertyOfTypeMyValue": 4

这可能吗?如果是这样,如何?

c# json asp.net-web-api asp.net-web-api2
2个回答
0
投票

我有类似的需求,对于像您这样的情况,我使用基元,字符串,而对于嵌套项目,我使用不同的类:

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]",
  }
}

希望有帮助


0
投票

是的,您可以通过为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; }
}

就是这样。它应该“正常工作”。

© www.soinside.com 2019 - 2024. All rights reserved.