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

ele*_*o23 4 c# enums json

我有一个 JSON 对象,例如

{
    "width": 200,
    "height": 150,
    "objectType": "container"
}
Run Code Online (Sandbox Code Playgroud)

在 C# 中我有一个类似的类

class MyObject {
    int width;
    int height;
    ObjectType objectType;
}
Run Code Online (Sandbox Code Playgroud)

ObjectType是枚举类型:

enum ObjectType {
    container, banner
}
Run Code Online (Sandbox Code Playgroud)

现在我想反序列化 JSON 对象并将字符串转换"container"为枚举值container。因为我对 C# 还很陌生,所以我无法将解决方案应用于类似的问题。我只发现了诸如“如何序列化 JSON 枚举数组?”之类的问题。

我想我必须以某种方式应用 StringEnumConverter 但仅适用于属性“objectType”?

我尝试过像

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

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

M. *_*cki 6

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

编辑您的模型类:

public enum ObjectType
{
    container,
    banner
}

public class MyObject
{
    public int width;
    public int height;
    [JsonConverter(typeof(StringEnumConverter))]
    public ObjectType objectType;
}
Run Code Online (Sandbox Code Playgroud)

并反序列化

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