使用JSON在Restfull WCF服务中接收POST请求的多个对象

编程入门 行业动态 更新时间:2024-10-27 22:20:29
本文介绍了使用JSON在Restfull WCF服务中接收POST请求的多个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

将2个对象序列化为流并将其附加到HttpWebRequest

Serialized 2 objects into a stream and attached it to HttpWebRequest

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(OBJECT1)); ser.WriteObject(stream1, controller); ser = new DataContractJsonSerializer(typeof(OBJECT2)); ser.WriteObject(stream1, reader); stream1.position =0;

我的json字符串看起来像这样(在上面的代码之后): {\"Object1Parameter1\":\"2\"}{\"Object2Parameter1\":\"Added reader\",\"Object2Parameter2\":\"2\"}

My json string looks like this (after above code) : {\"Object1Parameter1\":\"2\"}{\"Object2Parameter1\":\"Added reader\",\"Object2Parameter2\":\"2\"}

甚至尝试将父级添加到名称分别为OBJECT1和OBJECT2的字符串中,但仍然没有在服务器上反序列化数据.

Even tried adding parent to this string with name OBJECT1 and OBJECT2 resp, but still data did not get deserialized at server.

在Rest服务中接收这样的数据没有问题

There is no problem in receiving the data like this at the Rest service

[OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "Controller")] string AddBothObjects(/*parameters of both objects listed*/);

如何在服务端以两个对象而不是单个参数接收此数据. 像这样:

How do I receive this data at the service end in both objects rather than individual parameters. Something like this:

[OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "Controller")] string AddBothObjects(Object1 obj1,Object2 obj2);

推荐答案

我认为,当您将数据发布到WCF服务时,应该将要发送的所有数据包装到一个对象(一个请求对象)中.这是示例代码,用来显示我在说什么

I think when you POST data to your WCF service, you should wrap all of the data you're sending into an object (1 request object). This is sample code to show what I'm talking about

客户:

// declare ascii encoding ASCIIEncoding encoding = new ASCIIEncoding(); string jsonObject1 = "{\"Object1Parameter1\":\"2\"}"; string jsonObject2 = "{\"Object2Parameter1\":\"Added reader\",\"Object2Parameter2\":\"2\"}"; byte[] data = encoding.GetBytes(jsonObject1 + jsonObject2); string url = "localhost:64273/Sparql.svc/TestForStack"; string strResult = string.Empty; // declare httpwebrequet wrt url defined above HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url); // set method as post webrequest.Method = "POST"; // set content type webrequest.ContentType = "application/x-www-form-urlencoded"; // set content length webrequest.ContentLength = data.Length; // get stream data out of webrequest object Stream newStream = webrequest.GetRequestStream(); newStream.Write(data, 0, data.Length); newStream.Close(); //Gets the response WebResponse response = webrequest.GetResponse(); //Writes the Response Stream responseStream = response.GetResponseStream(); StreamReader sr = new StreamReader(responseStream); string s = sr.ReadToEnd();

服务界面

[OperationContract] [WebInvoke(Method = "POST", UriTemplate = "TestForStack", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] Stream TestForStack(Stream request);

服务实施

public Stream TestForStack(Stream request) { StreamReader requestReader = new StreamReader(request); //data contains "{\"Object1Parameter1\":\"2\"}{\"Object2Parameter1\":\"Added reader\",\"Object2Parameter2\":\"2\"}" string data = HttpUtility.UrlDecode(requestReader.ReadToEnd()); //Splits the two json objects into a list of json objects var output = data.Split(new[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => "{" + x + "}") .ToList(); //Parse your json object foreach (var entry in output) { var parsedObject = JsonConvert.DeserializeObject<JObject>(entry); foreach (var dataset in parsedObject.Properties()) { Console.WriteLine(dataset.Name); } } byte[] htmlBytes = Encoding.UTF8.GetBytes("Done"); return new MemoryStream(htmlBytes); }

更多推荐

使用JSON在Restfull WCF服务中接收POST请求的多个对象

本文发布于:2023-10-11 04:45:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1480719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   对象   Restfull   JSON   POST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!