【问题标题】:C# Convert list of string into objectC#将字符串列表转换为对象
【发布时间】:2021-09-26 09:42:21
【问题描述】:

如何将字符串列表转换为对象?

var flattenList = string.Join(",", jsonVars);
var convJsonVars = JsonConvert.SerializeObject(flattenList);
convJsonVars = "{" + convJsonVars + "}";

var emailData = JsonConvert.DeserializeObject<object>(convJsonVars);

我序列化flattenList后,结果如下:

"\"tenant_background_color\":\"#c41211\",\"tenant_logo_link\":\"https://imagelink.com\",\"tenant_font_color\":\"#FFFFFF\",\"tenant_name\":\"TNAME\",\"recipient_name\":\"User One\",\"login_link\":\"https://localhost:44330/\",\"verification_link\":\"https://localhost:44330/Link?Key=7b6c12fe-7658-45c5-a5c9-df9900231c6b-f7ea4ae9-3037-4dc5-98dd-e34a33770bb1\""

但是,当我尝试将其反序列化为对象类型并将其提交给 Sendgrids api 时,我总是收到错误消息,即我将字符串而不是对象类型传递给它们。

编辑:

这就是 jsonVars 现在的样子:

"\"tenant_background_color\":\"#c41211\""

它是一个字符串列表

【问题讨论】:

  • 为什么,如果你想序列化一个对象,你的第一次是扁平化成一个字符串吗?最好只 Seralise jsonVars。
  • 因为如果我序列化字符串列表,我会得到一个 Json 对象列表,而不仅仅是一个 Json 对象。
  • 好的,但是这种方法也行不通。如果您向我们展示今天的 jsonVars 的外观,并且可能会举例说明您希望输出的外观如何,那将会很有用。这样我们才能看得更清楚,提供更好的帮助。
  • 我编辑了我的问题以显示列表中的 1 个条目的外观。我只想要一个带花括号的对象。
  • 提交给Sendgrids api,你用的是什么版本的API方法?

标签: c# asp.net-core .net-core


【解决方案1】:

调用JsonConvert.SerializeObject 会使事情变得不必要地复杂化,因为您没有对象,而只有需要连接并用大括号括起来的属性。所以:

var convJsonVars = "{" + string.Join(",", jsonVars) + "}";

现在您可以通过两种在您的情况下等效的方式对其进行反序列化:

var emailData = JsonConvert.DeserializeObject<object>(convJsonVars);

var emailData = JObject.Parse(convJsonVars);

在这两种情况下,返回的对象都是 JObject 类型,因为您在 Json 反序列化期间没有提供架构。您仍然可以使用索引器访问emailData 属性,即emailData["tenant_background_color"]

【讨论】:

  • 嗨,马可,你是对的。它起作用了,我需要做的就是把大括号放在里面。
【解决方案2】:

当您对 json 字符串进行反序列化时,反序列化器会在 json 中查找键并填充与 json 对象键名称相同的字段。 基本模型object 没有自己的任何字段,也许您正在寻找Dictionary&lt;string,object&gt;expandoObject 的列表:

public static void Main()
{
    var productos = "[{\"codigo\":\"Servilleta\",\"cantidad\":2},{\"codigo\":\"Papelhig\",\"cantidad\":1}]";
    var listProductos = JsonConvert.DeserializeObject<List<ExpandoObject>>(productos);
    foreach (dynamic prod in listProductos)
    {
        Console.WriteLine("Código: " + prod.codigo + " - Cantidad: " + prod.cantidad);
    }
}

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2015-02-25
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多