如何在C#中将StringEnumConverter应用于JSON对象的单个属性

时间:2016-12-27 14:02:45

标签: c# json enums

我有一个像

这样的JSON对象
{
    "width": 200,
    "height": 150,
    "objectType": "container"
}

在C#中我有一个类

class MyObject {
    int width;
    int height;
    ObjectType objectType;
}

ObjectType是枚举类型:

enum ObjectType {
    container, banner
}

现在我想反序列化JSON对象并将字符串"container"转换为枚举值container。因为我是C#的新手,我无法对类似的问题应用解决方案。我只发现了诸如"如何序列化JSON数组枚举的问题?"

我想我必须以某种方式应用StringEnumConverter,但仅限于属性" objectType"?

我试过

var settings = new JsonSerializerSettings
{
    Converters = new[] { new StringEnumConverter() }
};
MyObject obj = JsonConvert.DeserializeObject<MyObj>(strJson);

如何正确应用StringEnumConverter将JSON对象转换为给定的C#对象?

2 个答案:

答案 0 :(得分:2)

使用[JsonConverter(typeof(StringEnumConverter))]装饰Class属性。这通知JSON.net仅将此属性序列化为枚举名称。 source

编辑模型类:

public enum ObjectType
{
    container,
    banner
}

public class MyObject
{
    public int width;
    public int height;
    [JsonConverter(typeof(StringEnumConverter))]
    public ObjectType objectType;
}

和反序列化

 public void Test()
    {
        var json = "{\"width\": \"200\",\"height\": \"150\",\"objectType\": \"container\"}";
        MyObject obj = JsonConvert.DeserializeObject<MyObject>(json);
    }

答案 1 :(得分:0)

鉴于您的实体和枚举:

public class MyObject {
    public int width;
    public int height;
    public ObjectType objectType;
}
public enum ObjectType {
    container, banner
}

反序列化后会自动返回正确的值:

string json=@"{
    ""width"": 200,
    ""height"": 150,
    ""objectType"": ""container""
}";

JavaScriptSerializer s = new JavaScriptSerializer();
s.MaxJsonLength = int.MaxValue;
MyObject output = s.Deserialize<MyObject>(json);