1

我使用以下 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() ?? "");
 }
4

1 回答 1

1

您的问题出在您的objectToDictionary方法中,ToString字符串数组的实现只返回"System.String[]".

您必须更改您的实现,以便 Json.Net 直接接收字符串数组,他会弄清楚如何序列化它。

于 2018-06-15T15:13:52.773 回答