如何解决如何在对象上执行foreach动态是枚举列表
我有一个枚举
{
e1 = 0,e2 = 1,e3 = 2,}
和其他枚举,例如:
enum MyOtherEnum
{
oe1 = 0,oe2 = 1,oe3 = 2,}
和其他一些枚举。我将json反序列化为对象,对象成员之一是MyEnum
的列表或MyOtherEnum
的列表。
无论枚举类型如何,我都需要在列表上执行foreach
我检查了此成员是否为列表,并尝试在此列表上执行foreach
,如下所示:
var itemValue = item.GetValue(json);
if (IsList(itemValue))
{
foreach (var listItem in (IEnumerable<dynamic>)itemValue)
{
//do something
}
}
我尝试过的事情:
-
无法广播以下列表:动态,对象,字符串或整数。始终需要强制转换为
IList<MyEnum>
-
通过使用
从列表中获取元素的类型Type type = itemValue.GetType().GetGenericArguments()[0];
但是编译器显示错误
type是var,但像Type一样使用
我知道某些解决方法是使用字符串而不是枚举,但是我想避免使用它。
谢谢。
解决方法
使用Json.NET,您可以这样做:
// here the itemValue is a dynamic
var itemValue = item.GetValue(json);
var token = JToken.Parse(itemValue.ToString());
if (token is JArray)
{
IEnumerable<MyEnum> myEnums = token.ToObject<List<MyEnum>>();
foreach (var listItem in myEnums)
{
// do something
}
}
编辑: 如果您还有另一个枚举,建议您将JSON更改为以下形式:
test.json:
{
"MyEnum":[ "2","1","2" ],"MyOtherEnum":[ "2","1" ],}
因此,您可以执行以下操作:
string jsonData = string.Empty;
jsonData = File.ReadAllText(@"\test.json");
dynamic myEnums = JsonConvert.DeserializeObject(jsonData);
var myEnumValues = myEnums.MyEnum;
var otherEnumValues = myEnums.MyOtherEnum;
foreach (var listItem in myEnumValues)
{
// do something
}
foreach (var listItem in otherEnumValues)
{
// do something else
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。