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
的空异常
假设 Aattributes
是 Dictionary<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);
}
}
我正在处理 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
的空异常假设 Aattributes
是 Dictionary<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);
}
}