:その後、
{
"WorkerType":"Small_Motivator"
}
とJSONを解析しよう
private void InitializeGenerator(Enum enumType)
{
if (enumType is Enums.Motivators)
{
// work work work work work
}
else if (enumType is Enums.Reactors)
{
// work
}
else if (enumType is Enums.Movers)
{
// work
}
else
{
// we dont know what it is
}
}
次のようになります私のJSON ..
..
JObject jObject = JObject.Parse(json);
JToken worker = jObject.GetValue("WorkerType");
Enum workerType = (Enum)Enum.Parse((typeof(Enum)), worker.ToString(), true);
InitializeGenerator(workerType);
は、次のエラーがスローされます
ここであなたが間違っていると思う:
Motivators workerType = (Motivators) Enum.Parse((typeof(Motivators)), worker.ToString(), true);
今worker.ToString()
は "Small_Motivator" の一つ、 "Medium_Motivator"、 "Large_Motivator" でなければなりません。ここ
EDIT
これにあなたの列挙型クラスを変更:
public class Enums
{
public enum Motivators{
Small_Motivator,
Medium_Motivator,
Large_Motivator
}
public enum Reactors{
Small_Reactor,
Large_Reactor
}
public enum Movers{
Small_Mover,
Large_Mover
}
public static Enum EnumFactory(string enum_string) {
if(enum_string.IndexOf("Motivator", StringComparison.OrdinalIgnoreCase) >= 0) {
return (Motivators) Enum.Parse((typeof(Motivators)), enum_string, true);
}
else if(enum_string.IndexOf("Reactor", StringComparison.OrdinalIgnoreCase) >= 0) {
return (Reactors) Enum.Parse((typeof(Motivators)), enum_string, true);
}
else if(enum_string.IndexOf("Mover", StringComparison.OrdinalIgnoreCase) >= 0) {
return (Movers) Enum.Parse((typeof(Motivators)), enum_string, true);
}
return null;
}
}
あなただけEnums.EnumFactory(worker.ToString())
を呼び出すことができます。
、ここでオンラインのランタイム環境へのリンクです: link
'' WorkerType "の値を解析すると、すでに' WorkerType'列挙体の値であると予想されます。だから、属性から 'Dictionary'を対応する列挙型に使うのはなぜですか? – PoByBolek