1

私はWCFWebサービスに取り組んでいます。次のように宣言されたJsonstringheサービスを返すPostサービスを作成する必要があります。

[WebInvoke(UriTemplate = "GetMatAnalysis",  ResponseFormat = WebMessageFormat.Json, 
                                                RequestFormat = WebMessageFormat.Json, 
                                                BodyStyle = WebMessageBodyStyle.WrappedRequest, 
                                                Method = "POST")]
string GetMatAnalysis(Stream image);

このメッセージでは、を使用してオブジェクトをシリアル化してJavaScriptSerializer().Serialize() から返しています。

ただし、応答を受け取ると、文字列の最初と最後に余分な二重引用符があります。たとえば、私は次のようになっています:"{"results" : 10 }"の代わりに{"results" : 10 }

リターンタイプを次のように変更しようとしました:次のSystem.ServiceModel.Channels.Messageエラーが発生します:

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.DataContractSerializerOperationBehavior contract: http://tempuri.org/:IMyWebServices ----> System.InvalidOperationException: The operation 'GetMatAnalysis' could not be loaded because it has a parameter or return type of type System.ServiceModel.Channels.Message or a type that has MessageContractAttribute and other parameters of different types. When using System.ServiceModel.Channels.Message or types with MessageContractAttribute, the method must not use any other types of parameters.

二重引用符なしでjson文字列を返すようにするにはどうすればよいですか?

追加情報:

このようにGETリクエストを使用すると:

[OperationContract(Name = "Messages")]
[WebGet(UriTemplate = "Messages/GetMessage", ResponseFormat = WebMessageFormat.Json)]
Message GetAdvertisment();

戻り値のタイプはメッセージであり、正しく機能します。受信したJson文字列は正しいです。

どんな助けでも大歓迎です。ありがとうございました

4

2 に答える 2

1

以降ResponseFormat = WebMessageFormat.Json、WCF サービスは返されたオブジェクトを Json としてシリアル化します。また、使用するJavaScriptSerializer().Serialize()と、二重のシリアル化が得られます。

于 2012-08-28T08:42:26.063 に答える