1

我的任务是使用 ASP.NET MVC4 Web API 创建 RESTfull 服务。其中一种服务方法如下所示:

[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;
    }
}

}

这里当前的问题是,当我发送以下 JSON 请求时,枚举 NativeDataType 正在处理: {"Name":"ABCD","DataType":2}

不幸的是,标记类是在另一个程序集中定义的。正因为如此

tmpTag.DataType = tag.DataType; 由于跨界问题导致异常(无效转换)的语句。

  1. 如何解决这个问题?
  2. 为什么 enum 的处理时间一样长?即使我观察到 uint,int,long,enum 被视为 long 和 float,double 在调用堆栈中被视为 double。
  3. 我可以得到如下的准确值

    对象值 = 空;tag.TryGetValue(Tag.Property.DataType, out value); tmpTag.DataType = Convert.ToInt32(值);

但是,而不是逐个访问 Tag 元素并将它们转换为精确类型,有没有最简单的方法可以自动转换并发送到另一个程序集?

4

1 回答 1

0

除了转换它,你可以做一个简单的演员吗?此外,从 int 继承应该默认为 INT32,但由于某种原因,您会得到 int64(长)。尝试显式地从 int32 继承。

于 2013-01-21T05:00:36.273 回答