我有一个 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# 对象?
使用 装饰 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)