1

このデータのこのjsonデータ(モデルまたは構造)は静的ではなく、各呼び出しに基づいて変更されますが、次のようなJsonデータセットがあるとしましょう。ジェネリックJsonデータセットをPOSTメソッドに渡すにはどうすればよいですか? WCFコードの?

{
  "experience": 14746,
  "status": true,
  "name": "Aaron",
  "uuid": "3123"
}

本体から POSTMAN や SoapUI を使いたいのですが?

public object PostData(string id, [FromBody] JObject data)
{
 //Do Something with data
}


public interface IPostService
{
    [OperationContract(Name = "PostData")]
    [WebInvoke(Method = "POST", UriTemplate = "/PostData?id={id}&data={data}")]
    object PostData(string id,[FromBody] JObject data);

}

何か助けていただければ幸いです

4

2 に答える 2

1

以前の回答で補足します。Newtonsoft は、オブジェクトを逆シリアル化するときに動的に使用できます。このように行われます。

var results = JsonConvert.DeserializeObject<dynamic>(json);
var experience= results.Experience;
var status= results.Status;
var name= results.Name;
var uuid= results.Uuid;
var dynamic_property= results.AnotherProperty;

別の方法。解析するクラスのすべての可能なプロパティがわかっている場合。Newtonsoft.Json の JsonProperty 属性を使用し、厳密に型指定された DeserializeObject を使用できます。

public class MyModel
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int experience {get;set;}

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public bool status {get;set;}

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string name {get;set;}

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string uuid {get;set;}

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public object property_1 {get;set;}

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public object property_2 {get;set;}

    ...
}

リクエストを行うことができます:

var httpRequest = WebRequest.Create(string.Format("baseurl" + "/PostData?id={0}", id));
httpRequest.Method = "POST";
httpRequest.ContentType = "application/json";
httpRequest.ContentLength = data.Length;

try
{
    using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
    {
        if (!string.IsNullOrEmpty(data))
        {
            streamWriter.Write(data);
            streamWriter.Flush();
            streamWriter.Close();
        }
    }

    var response = httpRequest.GetResponse();
}
catch (Exception)
{}
于 2013-07-18T21:21:49.957 に答える