C#如何构建动态对象

C#如何构建动态对象,c#,json,c#-4.0,json-deserialization,C#,Json,C# 4.0,Json Deserialization,我正在处理Json文件并向数据库添加值,但是有没有办法动态构建负载,只包含Json中显示的列 code payloadMessageContext.Update(new Payload { Id = 1, column1 = Attributes.Where(x => x.Key == "column1")?.FirstOrDefault().Value.ToString(), column2 = Attributes.Where(x =>

我正在处理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抛出null异常,第3列和第4列

假设
aaattributes
Dictionary
您可以执行以下操作:

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);
    }
}
static void Main(字符串[]args)
{
var Aattributes=新字典
{
[“Column1”]=“NewColumn1”,
[“Column3”]=“NewColumn3”,
};
var有效载荷=新有效载荷();
设置(Aattributes,“Column1”,有效负载,(target,val)=>target.Column1=val);
设置(Aattributes,“Column2”,有效负载,(target,val)=>target.Column2=val);
设置(Aattributes,“Column3”,有效负载,(target,val)=>target.Column3=val);
设置(Aattributes,“Column4”,有效负载,(target,val)=>target.Column4=val);
}
私有静态无效集(IDictionary源、字符串键、TTarget目标、操作设置器)
{
if(来源:ContainsKey(关键))
{
var值=源[键];
设定者(目标、价值);
}
}

Where
永远不会返回
null
所以
属性。Where(…)?。
是无用的。另一方面,
FirstOrDefault
可能返回
null
,因此您必须编写
FirstOrDefault()。
谢谢,问题更多的是如何从Paylod中跳过例如column2,如果json中没有Key==“column2”,请选择一个C#的版本。属性看起来如何?
是什么样的?什么类型的列表?
[“Column3”]=“NewColumn3”
只是一个可以放置
属性列表/字典的示例。当且仅当
属性中存在所需的
键时,
有效负载.ColumnX
属性的设置才会在
设置
方法中发生。