0

次のようなWCFサービスがあります。

public IEnumerable<int> AddProperty(string productId, string propertyClass, Property properties)

そして、次のデータでそれを呼び出しました:

{
    "Class":{"Name":"aoeu","Restricted":false,"Type":"ScalarProperty"},
    "DisplayName":"aoeu",
    "Id":"560",
    "Value":"aoeu"
}

そしてそれはうまくいきました。Propertyここで、次のようにサービスに別のサービスを追加したいと思います。

public IEnumerable<int> AddProperty(string productId, string propertyClass, Property properties, Property properties2)

どのデータを渡す必要がありますか? 私はこれを試しました:

{
    properties: {
        "Class":{"Name":"aoeu","Restricted":false,"Type":"ScalarProperty"},
        "DisplayName":"aoeu",
        "Id":"560",
        "Value":"aoeu"
    },
    properties2: {
        "Class":{"Name":"aoeu","Restricted":false,"Type":"ScalarProperty"},
        "DisplayName":"aoeu",
        "Id":"560",
        "Value":"aoeu"
    }
}

しかし、うまくいきませんでした!私はいくつかの異なる方法を試しましたが、それらはすべてうまくいきませんでした:(

4

2 に答える 2

1

次のように上記を実現できます。

[WebInvoke(BodyStyle=WebMessageBodyStyle.Wrapped,UriTemplate = "MultipleProperties?productId={productId}&propertyClass={propertyClass}")]    
public IEnumerable<int> AddProperty(string productId, string propertyClass, Property properties, Property properties2)

POST リクエストの一部として複数のオブジェクトをシリアル化する場合は、body スタイルを Wrapped に設定する必要があります。

Property クラスが以下のように定義されていると仮定します。

[DataContract]
    public class Property
    {
        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

生の Http リクエストは次のようになります。

POST http://locahost/XMLService/Service1.svc/AddProperty?productId=1&propertyClass=2 HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Content-Length: 134

{"properties": {"boolvalue": "true", "stringvalue": "str"}, "properties2" :{"boolvalue": "true", "stringvalue":"str2"}}
于 2012-05-16T11:53:36.693 に答える
0

このようにできますか?

public IEnumerable<int> AddProperty(string productId, string propertyClass, Property[] properties);

その後

[ 
    { 
        "Class":{"Name":"aoeu","Restricted":false,"Type":"ScalarProperty"}, 
        "DisplayName":"aoeu", 
        "Id":"560", 
        "Value":"aoeu" 
    }, 
    { 
        "Class":{"Name":"aoeu","Restricted":false,"Type":"ScalarProperty"}, 
        "DisplayName":"aoeu", 
        "Id":"560", 
        "Value":"aoeu" 
    } 
] 

productId、propertyClass などではなく、プロパティ コードしか表示されていないのではないでしょうか。

于 2012-05-16T10:59:39.873 に答える