我已经在互联网上搜索了几个小时,试图找到一个非常简单的使用 C# 中的 JSON 调用进行序列化和反序列化的示例。在仔细浏览和拼凑之后,我想在我的网络服务中调用一个 JSON(POST 和 GET)函数(见下文)。
这是我能够拼凑起来的
这将是我的服务合同 (IExecWebservice.svc)
using System.ServiceModel;
using System.ServiceModel.Web;
namespace _27963199
{
[ServiceContract]
public interface IExecFunction
{
[WebGet(UriTemplate = "/{function}/{args}")]
double CalcThis(string function, string args);
}
}
在我的主要代码中,我解析出用户请求 URI (IExecFunction.cs)
//user will send variables in REST URI http://myCalcServer/CalcThis/MethodA/10,20
using FunctionLibrary;
using System;
using System.Reflection;
namespace _27963199
{
public class ExecFunctionService : IExecFunction
{
public double CalcThis(string function, string args)
{
Type t = typeof(Functions);
MethodInfo[] libraryFunctions = t.GetMethods(BindingFlags.Static | BindingFlags.Public);
string[] arguments = args.Split(',');
//Missing piece of code where I split the URI for the JSON function that will POST the data object to be be calculated by the DROOLS/Rules Engine and the results passed back to the users web browser
...
}
}
}
现在在我单独的函数类中,我会有这样的东西(Function.cs)
using System;
using newton.json;
using System.Net.Http;
namespace FunctionLibrary
{
public static class Functions
{
public static double DoMathA(string url, string arg1, string arg2)
{
double d1;
double d2;
if (!double.TryParse(arg1, out d1) || !double.TryParse(arg2, out d2))
{
throw new ArgumentException("Arguments to function 'DoMathA' must be numeric.");
}
//Data Object Format "{'myData':{'Id':'5','var1':'10','var2':'90'}}"
myCalcObject = "{'myData':{'Id':'5', & arg1 & :'10', & arg2 & :'90'}}"
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
DataContractJsonSerializer ser = new DataContractJsonSerializer(data.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject (myCalcObject)
String json = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();
}
}
...
//Missing piece of code where I want to return the results of the JSON PUT and GET to the calling webservice
//JSON output string looks like this {"YourResults":{"condition":"YourHairIsOnFire","alertlevel":100,"id":0}}
//return or parse (json) to XLMS on the users browser
}
我需要帮助填写空白,以便正确解析请求 URI 以传递到 JSON 函数,并将回复 JSON 字符串翻译回用户浏览器上的 xlms。有什么想法吗?
更新:我尝试让 JSON 部分作为独立的 C# 类工作,但在编译时出现“预期类...”错误。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Net.Http;
using System.Net;
using Newtonsoft.Json;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http://172.16.20.26:8080/myDrools/result);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
DataContractJsonSerializer ser = new DataContractJsonSerializer(data.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject ("{'myData':{'Id':'5','var1':'4.5','var2':'8.7'}}")
String json = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();
我在这里做错了什么?如何从中获得 XMLS 输出?