リフレクションを使用してシリアル化されたデータを作成するシリアル化コンポーネントを作成していますが、列挙されたプロパティから奇妙な結果が得られます。
enum eDayFlags
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public eDayFlags DayFlags { get; set; }
今、実際のテストのために
Obj Test = new Obj();
Test.DayFlags = eDayFlags.Friday;
シリアル化の出力は次のようになります。
DayFlags = Friday
しかし、変数に2つのフラグを設定した場合:
Obj Test = new Obj();
Test.DayFlags = eDayFlags.Friday;
Test.DayFlags |= eDayFlags.Monday;
シリアル化の出力は次のようになります。
DayFlags = 34
シリアル化コンポーネントで行っていることは非常に簡単です。
//Loop each property of the object
foreach (var prop in obj.GetType().GetProperties())
{
//Get the value of the property
var x = prop.GetValue(obj, null).ToString();
//Append it to the dictionnary encoded
if (x == null)
{
Properties.Add(HttpUtility.UrlEncode(prop.Name) + "=null");
}
else
{
Properties.Add(HttpUtility.UrlEncode(prop.Name) + "=" + HttpUtility.UrlEncode(x.ToString()));
}
}
列挙型で値が1つしかない場合でも、PropertyInfo.GetValueから変数の実際の値を取得する方法を教えてもらえますか?
ありがとう