我将使用以下restconnector向REST服务器发布一些JSON:
using Newtonsoft.Json;
public static T httpPost(String myURL, Dictionary<string, string> data) {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myURL);
Console.WriteLine("Sending Request to: " + myURL);
request.Method = "POST";
var json = JsonConvert.SerializeObject(data);
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("JSON: "+ json);
Console.WriteLine("");
Console.WriteLine("");
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(json);
request.ContentType = "application/json";
request.ContentLength = byte1.Length;
Stream newStream = request.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
//...
}
我将从服务器*返回以下错误:
不能将值java.Lang.St[]的实例反序列化
进一步调查后,这是发布的原始JSON:
{
"tag1":"val1",
"tag2":"System.String[]",
...
}
如何序列化此对象以便正确发送数组?
例子:
{
"tag1":"val1",
"tag2":[],
...
}
编辑:
这是我创建要序列化的对象的位置:
MyObject mo =new MyObject();
mo.tag1= "val1";
mo.tag2= new String[]{};
Dictionary<string, string> input = objectToDictionary(mo);
mo = RestConnector<MyObject>.httpPost("http://example.com", input);
反对文学的
public Dictionary<string, string> objectToDictionary(object obj) {
return obj.GetType().GetProperties()
.ToDictionary(x => x.Name, x => x.GetValue(obj)?.ToString() ?? "");
}