WCF& JSON:序列化长为字符串

时间:2012-12-04 10:34:00

标签: json wcf wcf-data-services

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

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

正常休息wcf服务使用以下服务合同:

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

而wcf数据服务将长值返回为字符串

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

MyService ServiceContract返回长数字

{ "ID":865176660053852161 }

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

问题是:我的客户端应用程序使用JavaScript,因此无法处理64位数字。我原以为,“普通”休息服务也会将64位数字作为字符串返回。

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

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

1 个答案:

答案 0 :(得分:0)

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

[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值....