我有一个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位数字作为字符串返回。
为了保持一致性,我希望在服务器端的序列化过程中进行转换,但我不知道这是否可行。
答案 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值....