0

質問があります。このエラーが発生しましたが、int32 の番号制限が 2147483647 であることが原因であることはわかっています。しかし、問題の値 (11 桁の電話番号) が次のように定義されている場合に、このエラーが発生する理由がわかりません。 SQL データベースの文字列、Web サービスの文字列、Web アプリケーションの文字列です。

サービスが接続を介してデータをシリアル化および逆シリアル化する方法に関係していると思いますが、逆シリアル化が発生したときに、文字列を解析する代わりに Number に強制的に文字列のみを使用させる方法があるかどうかを知りたいと思っていました。または、int64 として解析することもできます。

エラー例外は次のとおりです。名前空間とサービス名を削除しました。問題を引き起こしているのはプロパティ Number です。

タイプ .".ClientPhone[] のオブジェクトのデシリアライズ中にエラーが発生しました。値 '07721545554' はタイプ 'Int32' として解析できません。"

サービスとサービス インターフェイスのコードは次のとおりです。

[DataContract]
public class ClientPhone
{
    [DataMember]
    public int? ClientNumberID { get; set; }
    [DataMember]
    public int? RefID { get; set; }
    [DataMember]
    public string Number { get; set; }
    [DataMember]
    public string NumberType { get; set; }
    [DataMember]
    public bool? PrimaryNumber { get; set; }
}

    public partial class ClientNumberEntity
{
    public int ClientNumbersID { get; set; }
    public Nullable<int> RefID { get; set; }
    public string ClientNumberType { get; set; }
    public string ClientNumber { get; set; }
    public Nullable<bool> PrimaryNumber { get; set; }

    public virtual ClientDataEntity ClientData { get; set; }
}

public List<ClientPhone> GetClientsPhoneByReference(int _reference)
    {
        OurDatabaseEntities context = new OurDatabaseEntities();
        var phoneEntity = (from c in context.ClientNumberEntities
                           where c.RefID == _reference
                           select c).ToList();
        if (phoneEntity != null)
        {
            return TranslateClientPhoneEntityToPhoneNumberList(phoneEntity);
        }
        else
            throw new Exception("Unable to get phone data");
    }

private List<ClientPhone> TranslateClientPhoneEntityToPhoneNumberList(List<ClientNumberEntity> numberEntities)
    {
        List<ClientPhone> phoneList = new List<ClientPhone>();
        foreach (ClientNumberEntity numberEntity in numberEntities)
        {
            ClientPhone phoneListMember = new ClientPhone();
            phoneListMember.ClientNumberID = numberEntity.ClientNumbersID;
            phoneListMember.RefID = numberEntity.RefID;
            phoneListMember.Number = numberEntity.ClientNumber;
            phoneListMember.NumberType = numberEntity.ClientNumberType;
            phoneListMember.PrimaryNumber = numberEntity.PrimaryNumber;
            phoneList.Add(phoneListMember);
        }
        return phoneList;
    }

解決策に関するアドバイスをいただければ幸いです。ありがとう :)

4

1 に答える 1

0

私の側ではもっと愚かですが、解決策を得ました。

.EDMX エンティティ ダイアグラムがデータベースからの新しい値で更新されていないことに気付きませんでした (強制的に変更するには、エンティティを手動で削除し、再度追加する必要がありました)。

サービス参照を再コンパイルして更新した後、機能しました。

于 2013-08-12T08:20:56.623 に答える