C#如何构建动态对象

C# how to build dynamic object

我正在处理 Json 文件并将值添加到数据库中,但是有什么方法可以动态构建有效负载以仅包含 Json 中显示的列?

code payloadMessageContext.Update(new Payload {
    Id = 1,
    column1 = Attributes.Where(x => x.Key == "column1")?.FirstOrDefault().Value.ToString(),
    column2 = Attributes.Where(x => x.Key == "column2")?.FirstOrDefault().Value.ToString(),
    column3 = Attributes.Where(x => x.Key == "column3")?.FirstOrDefault().Value.ToString(),
    column4 = Attributes.Where(x => x.Key == "column4")?.FirstOrDefault().Value.ToString(),
});
await payloadMessageContext.SaveChangesAsync();

我正在使用的 Json 文件是动态的,例如,如果我对系统中的所有 4 列进行了更新,那么它将生成我可以用于我的 Paylod 的格式,但是如果我做了一个更新到 column1,然后 Json 仅包含 column1 的键,然后它不能用于我的 Paylod,因为代码将抛出 column2、column3 和 column4

的空异常

假设 AattributesDictionary<string, string> 你可以这样做:

static void Main(string[] args)
{
    var Aattributes = new Dictionary<string, string>
    {
        ["Column1"] = "NewColumn1",
        ["Column3"] = "NewColumn3",
    };

    var payload = new Payload();

    Set(Aattributes, "Column1", payload, (target, val) => target.Column1 = val);
    Set(Aattributes, "Column2", payload, (target, val) => target.Column2 = val);
    Set(Aattributes, "Column3", payload, (target, val) => target.Column3 = val);
    Set(Aattributes, "Column4", payload, (target, val) => target.Column4 = val);
}

private static void Set<TTarget>(IDictionary<string, string> source, string key, TTarget target, Action<TTarget, string> setter)
{
    if (source.ContainsKey(key))
    {
        var value = source[key];
        setter(target, value);
    }
}