ASP.NET MVC4 Web API を使用して RESTfull サービスを作成するタスクがあります。サービス メソッドの 1 つは、次のようになります。
[HttpPost]
public HttpResponseMessage TagAdd([FromBody] Tag tag)
{
HttpResponseMessage result;
Tag tmpTag = new Tag();
tmpTag.Name = tag.Name;
tmpTag.DataType = tag.DataType;
}
タグは次のようになります。
public class Tag : Dictionary<Tag.Property, object>
{
public enum Property : int
{
Name = 0,
DataType
}
public enum NativeDataType : int
{
Undefined = 0,
Scaled,
Float,
}
public string Name
{
get
{
object value;
return TryGetValue(Property.Name, out value) ? (string)value : null;
}
set
{
this[Property.Name] = value;
}
}
public NativeDataType DataType
{
get
{
object value;
return TryGetValue(Property.DataType, out value) ? (NativeDataType)(value) : NativeDataType.Undefined;
}
set
{
this[Property.DataType] = value;
}
}
}
ここで現在の問題は、enum NativeDataType が、JSON リクエストの下に送信したときと同じように処理されていることです: {"Name":"ABCD","DataType":2}
残念ながら、Tag クラスは別のアセンブリで定義されていました。そのための
tmpTag.DataType = tag.DataType; 境界をまたぐ問題のため、例外 (無効なキャスト) につながるステートメント。
- この問題を解決するにはどうすればよいですか?
- enumが長く扱われていたのはなぜですか? uint、int、long、enum が long として扱われ、float、double がコール スタックで double として扱われていることを確認しました。
以下のような正確な値を取得できます
オブジェクト値 = null; tag.TryGetValue(Tag.Property.DataType, out value); tmpTag.DataType = Convert.ToInt32(値);
しかし、タグ要素に 1 つずつアクセスして正確な型に変換するのではなく、自動的に変換して別のアセンブリに送信する最も簡単な方法はありますか?