如何将动态Json对象(数据)传递给wcf ResTful服务
本文关键字:wcf 服务 ResTful 数据 动态 Json 对象 | 更新日期: 2023-09-27 18:23:35
so假设我有一个Json数据集,如下所示,即使这个数据的Json数据(模型或结构)不是静态的,它会根据每次调用而变化,我如何将通用Json数据集中传递到WCF代码的POST方法中?
{
"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);
}
任何帮助都将不胜感激
当您在UriTemplate属性中指定变量data时,您表示该值将在查询字符串中,而不是在BODY中,默认情况下,WebInvokeMethod属性的HTTP方法为POST。
public object PostData(string id, string data)
{
//Do Something with data
}
public interface IPostService
{
[OperationContract(Name = "PostData")]
[WebInvoke(UriTemplate = "/PostData?id={id})]
object PostData(string id, string data);
}
然后,您可以使用Newtonsoft库将Json格式的字符串值解析为具有动态属性的对象。您可以将Newtonsoft库与Nuget一起使用。
要了解如何使用Newtonsoft解析动态对象,请单击此处。
补充我之前的回答。在反序列化对象时,Newtonsoft可以与dynamic一起使用。以这种方式执行。
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)
{}