0

我有一个 wcf 数据服务和一个正常的 rest wcf 服务。两种服务都返回相同的实体对象。

[DataContract]
public partial class MyEntity
{
    #region Primitive Properties
    [DataMember]
    public virtual long ID
    {
        get;
        set;
    }
    ....

正常的 rest wcf 服务使用以下服务契约:

[ServiceContract]
public interface MyService
{
    [OperationContract]
    [WebGet(UriTemplate="MyEntity/{id}",ResponseFormat=WebMessageFormat.Json)]
    public MyEntity GetMyEntity(string id)
}

而 wcf 数据服务将 long 值作为字符串返回:

{{"id": ... ,"uri": ... ,"type":"Model.MyEntity"},"ID":"865176660053852161"}

MyService ServiceContract 返回 long as number

{ "ID":865176660053852161 }

似乎 wcf 数据服务和“正常”休息服务使用两种不同的序列化机制。

问题是:我的客户端应用程序使用 JavaScript,因此无法处理 64 位数字。我本来预计,“正常”休息服务也会返回 64 位数字作为字符串。

  • 在序列化/反序列化过程中,我在哪里可以将数字转换为字符串?
  • 万一有人知道:为什么 wcf 数据服务/基于休息的 wcf 之间的行为不同?

为了保持一致性,我希望在服务器端的序列化过程中进行转换,但我不知道这是否可行。

4

1 回答 1

0

我现在的解决方法是为 poco 生成调整 t4 模板,以便像这样生成实体对象:

[DataContract]
public partial class MyEntity
{
    #region Primitive Properties

    public virtual long ID
    {
        get { return _iD; }
        set { _iD = value; _iDStr = value.ToString(); }
    }

    [DataMember(Name="ID")]
    private string _iDStr;
    private long _iD;

    ...

这将在 WCF 响应中将 ID 作为字符串返回,而实体框架仍然使用 long 值...。

于 2012-12-05T09:21:15.257 回答