我有一个像
这样的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#对象?
答案 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);