gpt4 book ai didi

C# - 动态添加对象(添加动态属性名称)

转载 作者:行者123 更新时间:2023-12-03 23:49:39 24 4
gpt4 key购买 nike

我正在尝试创建一些动态的ExpandoObject。我遇到了某个问题。

由于我不知道我的对象中这些不同属性的名称应该是什么,所以我不能这样做:

var list = new ArrayList();

var obj = new ExpandoObject();
obj.ID = 1,
obj.Product = "Pie",
obj.Days = 1,
obj.QTY = 65

list.Add(obj);

让我解释一下我的情况:我希望从随机数据库中获取数据(我不知道是哪个,但是根据我从 UI 获得的信息构建连接字符串),因此我不知道我的数据是什么需要得到。这可能是一个数据库表的例子

餐 table 销售

  • ID:整数,
  • 产品:nvarchar(100),
  • 天数:整数,
  • 数量:大整数

这可能是另一个例子:

TABLE Foobar

  • ID:整数,
  • 天数:整数
  • 数量:大整数
  • Product_Id:整数
  • Department_Id:整数

如您所见,我不知道数据库是什么样的(这是 100% 匿名的,因此它需要是 100% 动态的),我想要返回的数据应该看起来像一个构造良好的 JSON,比如所以:

[
{
"ID": 1,
"Product": "Pie"
"Days": 1,
"QTY": 65
},
{
"ID": 2,
"Product": "Melons"
"Days": 5,
"QTY": 12
}
]

或者,用另一个例子:

[
{
"ID": 1,
"Days": 2,
"QTY": 56,
"Product_Id": 5,
"Department_Id": 2
}
{
"ID": 2,
"Days": 6,
"QTY": 12,
"Product_Id": 2,
"Department_Id": 5
}
]

我已尝试使用这些 ExpandoObject,但似乎无法使其正常工作,因为我无法执行此问题顶部所示的操作(我不'不知道属性的名称)。有没有办法让我说:

var obj = new ExpandoObject();
var propName = "Product";

var obj.propName = "Pie"

Console.WriteLine("Let's print!: " + obj.Product);

//OUTPUT
Let's print!: Pie

有没有人有可能解决这种情况的解决方案,例如对结构的简单指导?

最佳答案

而不是创建 ExpandoObject或其他一些动态类型,您可以创建 List<Dictionary<string, object>>其中每个 Dictionary<string, object>包含要序列化的名称/值对。然后使用 Json.NET 序列化为 JSON (或 JavaScriptSerializer ,虽然不太灵活):

        var list = new List<Dictionary<string, object>>();

// Build a dictionary entry using a dictionary initializer: https://msdn.microsoft.com/en-us/library/bb531208.aspx
list.Add(new Dictionary<string, object> { { "ID", 1 }, {"Product", "Pie"}, {"Days", 1}, {"QTY", 65} });

// Build a dictionary entry incrementally
// See https://msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.110%29.aspx
var dict = new Dictionary<string, object>();
dict["ID"] = 2;
dict["Product"] = "Melons";
dict["Days"] = 5;
dict["QTY"] = 12;
list.Add(dict);

Console.WriteLine(JsonConvert.SerializeObject(list, Formatting.Indented));
Console.WriteLine(new JavaScriptSerializer().Serialize(list));

第一个输出:

[
{
"ID": 1,
"Product": "Pie",
"Days": 1,
"QTY": 65
},
{
"ID": 2,
"Product": "Melons",
"Days": 5,
"QTY": 12
}
]

第二个输出相同,没有缩进:

[{"ID":1,"Product":"Pie","Days":1,"QTY":65},{"ID":2,"Product":"Melons","Days":5,"QTY":12}]

关于C# - 动态添加对象(添加动态属性名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32603113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com