2009-04-09 3 views
1

私は正しい用語が何であるかを100%確信していません。WCFがlongまたはintをシリアル化できないのはなぜですか?

私はInParamsという名前のクラスを2つのフィールド、文字列とロング、およびフィールドに対応するプロパティアクセサで構成しています。これらはそれぞれ[DataContract]と[DataMember]で装飾されています。

私がvoidテスト(InParams inParams)と呼ばれるWCFサービスメソッドを持っている

サービスメソッドは、長いフィールドを実行しているがとき、プロキシはsvcutilで罰金生成され、私は長いフィールドを設定することができた常に0です私は明示的に長いフィールドを設定しています。私は石鹸の封筒を見て、私の長いフィールドのためのタグが表示されません。

ロングフィールドを文字列フィールドに変更すると、シリアル化されます。 intの場合も同様です。

属性が不足していますか?

+0

生成されたプロキシクラスにNameOfYourLongFieldSpecifiedというブール値プロパティがありますか? –

+0

私は上記と同じ問題があります。デシリアライゼーションは、既存のASP.NET WebフォームアプリケーションにWebAPIフレームワークを追加するまでうまくいきました。 APIメソッドは、サービスレイヤにあるWCFメソッドを内部的に呼び出します。アプリケーションの他の部分は、データ検索のためのWCFメソッドを呼び出し、多くのプリミティブ型を持っています。 WebAPIフレームワークが追加されると、デシリアライズに失敗しました(TraceViewerでリクエストをトレースし、パラメータのデフォルト値は0でした)。 WebAPIフレームワークを削除し、すべて正常に戻りました。誰もそのような問題に直面した? –

+0

@Kwan Cheng。問題の解決策を見つけましたか?何も私のために働くようではなく、WCF RESTフレームワーク(webHttpBinding)を使用して私のニーズに合うようにしなければなりませんでした。 –

答えて

2

サンプルを投稿できますか?ダブルチェックに:

  • PUBLIC性を確保[のDataContract()]装飾クラスが持っていることを確認[DataMemberを()]装飾持って

プロキシクラスは除去することにより、最新のものであることを確認/再生する。違いがあるかどうかを確認してください。

+0

ええ、私は不動産の公的なものか何かに行くつもりです。 –

0

Tannerが述べたことに加えて、longとintはDataContractSerializerによって明確にサポートされています。

.NET Frameworkプリミティブ型。 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Boolean、Char、Decimal、Object、および.NET Frameworkに組み込まれている次の型は、すべてシリアル化され、プリミティブ型と見なされます。文字列。 Link

+0

私は同意し、既知のタイプの問題について言及するつもりでしたが、関係するタイプのために問題は生じませんでした。 – Tanner

0

YourPropertyNameに加えて、クライアントにboolean YourPropertyNameSpacifiedプロパティがある場合は、クライアントでtrueに設定する必要があります。これは価値のタイプのすべての分野に適用されます。また、WCF service proxy not setting "FieldSpecified" propertyを参照してください。

関連する問題