C#如何构建动态对象
我正在处理Json文件并向数据库添加值,但是有没有办法动态构建负载,只包含Json中显示的列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 =>
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
属性的设置才会在设置方法中发生。