【问题标题】:Construct a JArray with only strings values without a key in C#在 C# 中构造一个只有字符串值而没有键的 JArray
【发布时间】:2016-10-24 02:51:00
【问题描述】:

如果有人帮助我在 C# 中仅使用值而不使用键来构造 JArray,我将不胜感激。这是我想要的一个例子:

{[
  "ZGVyZWtAcG9zc2tpLmNvbQ==",
  "YW5kcmVAbGltYWcubmV0",
  "YW5keUBiYW9iYW9tYWlsLmNvbQ==",
  "dGVzdEBraW5ub3YuY29t",
  "c2hhaG5hd2F6LmFsYW0xM0Bob3RtYWlsLmNvbQ==",
  "YnJlYW5uQGVtYWlsLmNvbQ=="
]}

这是我为它编写的代码,但我遇到了一个异常,因为当我声明 JObject 时,它要求我有一个键和一个值,但我只需要值,因为我将此数组作为参数发送到一个 API,他们需要特定格式的 API。

这是导致问题的代码:

var recipients = new JArray();
foreach (var c in retrievedContacts.recipients)
{
    var jsonObject = new JObject();
    jsonObject.Add(c.id);
    recipients.Add(jsonObject);
}
dynamic addToListResponse = await sg.client.contactdb.lists._(listJson.lists[0].id).recipients.post(requestBody: recipients);

最后一行向 SendGrid 发送一个 post 请求。这里列表 id 是有效的,除了在循环中添加 json 对象外一切正常。请帮忙!

【问题讨论】:

  • 我回答了您关于如何构造JArray 的问题,然后意识到您的 JSON 无效。上传到jsonlint.com,你会看到一个错误。您的外部容器有大括号 - { 然后是 } - 但不包含名称/值对。它只有一个值,即一个数组。你确定这是你想要的吗?或者你想要{"requestBody": [..]}

标签: c# json json.net sendgrid


【解决方案1】:

要创建具有指定值的JArray,您可以使用JToken.FromObject() 将您的c.id 转换为JToken,然后将construct 转换为您的JArray,如下所示:

var recipients = new JArray(retrievedContacts.recipients.Select(c => JToken.FromObject(c.id)));

特别是,如果id 是一个字节数组,则此方法有效。在这种情况下,Json.Net 会将其转换为 base64 字符串。示例fiddle

如果c.id 已经 是一个字符串(在您的问题中,您没有指定它的类型),您可以跳过对FromObject() 的调用并按原样添加它而不进行序列化:

var recipients = new JArray(retrievedContacts.recipients.Select(c => c.id));

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多