0

私は 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 データ サービスは long 値をstringとして返します。

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

MyService ServiceContract は long as numberを返します:

{ "ID":865176660053852161 }

wcf データ サービスと「通常の」残りのサービスは、2 つの異なる種類のシリアル化メカニズムを使用しているようです。

問題: 私のクライアント アプリは JavaScript を使用しているため、64 ビットの数値を処理できません。「通常の」残りのサービスも64ビットの数値を文字列として返すと予想していました。

  • シリアル化/逆シリアル化プロセス中に数値を文字列に変換できる場所はどこですか?
  • 誰かが知っている場合:wcfデータサービス/残りのwcfで動作が異なるのはなぜですか?

一貫性を保つために、サーバー側でのシリアル化プロセス中に変換することをお勧めしますが、これが実現可能かどうかはわかりません。

4

1 に答える 1

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 値で動作します....

于 2012-12-05T09:21:15.257 に答える