1

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; 境界をまたぐ問題のため、例外 (無効なキャスト) につながるステートメント。

  1. この問題を解決するにはどうすればよいですか?
  2. enumが長く扱われていたのはなぜですか? uint、int、long、enum が long として扱われ、float、double がコール スタックで double として扱われていることを確認しました。
  3. 以下のような正確な値を取得できます

    オブジェクト値 = null; tag.TryGetValue(Tag.Property.DataType, out value); tmpTag.DataType = Convert.ToInt32(値);

しかし、タグ要素に 1 つずつアクセスして正確な型に変換するのではなく、自動的に変換して別のアセンブリに送信する最も簡単な方法はありますか?

4

1 に答える 1

0

変換する代わりに、単純なキャストを行うことができますか? また、int からの継承はデフォルトで INT32 になるはずですが、何らかの理由で int64 (long) を取得します。int32 から明示的に継承してみてください。

于 2013-01-21T05:00:36.273 に答える