C# 使用HTTPClient PostAsync发送阵列

C# 使用HTTPClient PostAsync发送阵列,c#,xamarin.forms,json.net,C#,Xamarin.forms,Json.net,我有一组位置点(纬度、经度和创建位置),需要批量发送。但是,当我使用JsonConvert.SerializeObject()时,它返回一个无法在服务器端点上解析的字符串 var location_content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("access_token", $"{Settings.AuthToken}"), new KeyValuePair&l

我有一组位置点(纬度、经度和创建位置),需要批量发送。但是,当我使用
JsonConvert.SerializeObject()
时,它返回一个无法在服务器端点上解析的字符串

var location_content = new FormUrlEncodedContent(new[] {
    new KeyValuePair<string, string>("access_token", $"{Settings.AuthToken}"),
    new KeyValuePair<string, string>("coordinates", JsonConvert.SerializeObject(locations))
});

var response = await client.PostAsync(users_url + bulk_locations_url, location_content);
坐标数组作为一个大字符串出现,因此它看起来像是
:“[{\”created_at\”:
,而它应该是
:[{”created_at:

因此,服务器期望如下所示:

{"access_token":"XX","coordinates":[{\"created_at\":\"2018-03-27T21:36:15.308265\",\"latitude\":XX,\"longitude\":XX},{\"created_at\":\"2018-03-27T22:16:15.894579\",\"latitude\":XX,\"longitude\":XX}]}
Location.cs

public class Location
{
    public DateTime created_at { get; set; }
    public double latitude { get; set; }
    public double longitude { get; set; }

    [PrimaryKey, AutoIncrement, JsonIgnore]
    public int id { get; set; }

    [JsonIgnore]
    public bool uploaded { get; set; }

    public Location()
    {

    }

    public Location(double lat, double lng)
    {
        latitude = lat;
        longitude = lng;

        uploaded = false;
        created_at = DateTime.UtcNow;

        Settings.Latitude = latitude;
        Settings.Longitude = longitude;
    }

    public Location(Position position) : this(position.Latitude, position.Longitude) {}
}
有没有办法使键值对成为
?我还没有找到不使用
对的示例


HttpClient对于json数据数组还有其他解决方法吗?

构建模型,然后在发布之前序列化整个内容

var model = new{
    access_token = Settings.AuthToken,
    coordinates = locations
};
var json = JsonConvert.SerializeObject(model);
var location_content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(users_url + bulk_locations_url, location_content);

首先,服务器希望得到什么?@Nkosi我为您更新了帖子。@dbc您如何使用PostAsync并按原样发送对象?我已经包含了我的Location.cs。谢谢!我从服务器的响应中得到了401,但我确信这是我应得的!
var model = new{
    access_token = Settings.AuthToken,
    coordinates = locations
};
var json = JsonConvert.SerializeObject(model);
var location_content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(users_url + bulk_locations_url, location_content);