我使用以下 RestConnector 将一些 JSON 发布到 REST 服务器:
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.String[] 的实例超出 VALUE_STRING
经过进一步调查,这是发布的原始 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() ?? "");
}