首页 > 解决方案 > C#将字符串列表转换为对象

问题描述

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

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\""

它是一个字符串列表

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

解决方案


当您对 json 字符串进行反灭菌时,反序列化程序会在 json 中查找键并填充与 json 对象键同名的字段。基本模型object没有它自己的任何字段,也许您正在寻找一个Dictionary<string,object>或一个列表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);
    }
}

推荐阅读