0

カスタムクラスCustomerとそのプロパティがあります。クラスとDataMemberの上にDataContractマークをプロパティに追加しましたが、正常に機能していましたが、サービスクラスの関数を呼び出して、顧客インスタンスをパラメーターとして渡し、一部のプロパティは0の値を取得します。

デバッグ中、プロパティ値を確認でき、関数に到達した後、一部のプロパティの値は0になります。なぜそうなるのでしょうか。

この2つのアクションの間にコードはありません。DataContractマークは正常に機能し、すべて問題ありません。この問題に関する提案はありますか?

ByRefをByValに変更しようとしましたが、何も変更されません。なぜそれは他の値を正しく渡し、整数型のいくつかはちょうど0を渡すのでしょうか?

答えは簡単かもしれませんが、私にはわかりません。

ありがとうございました。

  <DataContract()> 
    Public Class Customer 
    Private Type_of_clientField As Integer = -1 

      <DataMember(Order:=1)>  
      Public Property type_of_client() As Integer 
        Get 
          Return Type_of_clientField 
        End Get 
        Set(ByVal value As Integer) 
          Type_of_clientField = value 
        End Set 
      End Property 
    End Class 

    <ServiceContract(SessionMode:=SessionMode.Allowed)> 
    <DataContractFormat()> 
    Public Interface CustomerService 

    <OperationContract()> 
    Function addCustomer(ByRef customer As Customer) As Long 

    End Interface

addCustomer関数を呼び出す前のtype_of_clientプロパティ値は6です。その関数に入った後、値は0です。

更新:問題はインスタンスの作成にあります。

クライアント側でサービス側に格納されているクラスのインスタンスを作成すると、一部のプロパティは0または何も渡されませんが、そのクラスの新しいインスタンスを返すサービスクラスの関数を呼び出すと、それは機能します大丈夫。

違いは何ですか?それはシリアル化の問題でしょうか?

4

1 に答える 1

1

データメンバーの秩序パラメーターを使用している場合は、0から開始して増分する必要があります(つまり、1を0にすると、次のデータメンバーは1になります)。これは、複数のメンバーがいる場合に機能する可能性がありますが、表示するクラスの位置が1つではないため、変数を配置する場所がありません。

于 2010-03-26T07:43:32.797 に答える