Det*_*ium 2 c# json structure dynamic expandoobject
我正在尝试创建一些动态的ExpandoObject。我遇到了一个问题。
由于我不知道对象中这些不同属性的名称是什么,所以我不能这样:
var list = new ArrayList();
var obj = new ExpandoObject();
obj.ID = 1,
obj.Product = "Pie",
obj.Days = 1,
obj.QTY = 65
list.Add(obj);
Run Code Online (Sandbox Code Playgroud)
让我解释一下我的情况:我希望从随机数据库中获取数据(我不知道该数据,而是根据从UI中获得的信息构建一个连接字符串),因此我不知道我需要获取哪些数据。这可能是数据库表的示例
表销售
这可能是另一个例子:
桌上足球吧
如您所见,我不知道数据库是什么样的(这是100%匿名的,因此它必须是100%动态的),并且我要返回的数据应该看起来像一个构造良好的JSON,如下所示:
[
{
"ID": 1,
"Product": "Pie"
"Days": 1,
"QTY": 65
},
{
"ID": 2,
"Product": "Melons"
"Days": 5,
"QTY": 12
}
]
Run Code Online (Sandbox Code Playgroud)
或者,使用另一个示例:
[
{
"ID": 1,
"Days": 2,
"QTY": 56,
"Product_Id": 5,
"Department_Id": 2
}
{
"ID": 2,
"Days": 6,
"QTY": 12,
"Product_Id": 2,
"Department_Id": 5
}
]
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用这些ExpandoObjects,但似乎无法使其正常工作,因为我无法完成此问题顶部的说明(我不知道属性的名称)。有没有办法让我这样说:
var obj = new ExpandoObject();
var propName = "Product";
var obj.propName = "Pie"
Console.WriteLine("Let's print!: " + obj.Product);
//OUTPUT
Let's print!: Pie
Run Code Online (Sandbox Code Playgroud)
有没有人有可能解决这种情况的解决方案,或者只是对结构的指导?
ExpandoObject您可以创建一个List<Dictionary<string, object>>,其中每个Dictionary<string, object>包含要序列化的名称/值对,而不是创建一个或其他动态类型。然后使用Json.NET(或JavaScriptSerializer,将序列化为JSON ,尽管灵活性较差):
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));
Run Code Online (Sandbox Code Playgroud)
第一个输出:
Run Code Online (Sandbox Code Playgroud)[ { "ID": 1, "Product": "Pie", "Days": 1, "QTY": 65 }, { "ID": 2, "Product": "Melons", "Days": 5, "QTY": 12 } ]
第二个输出没有缩进的相同:
Run Code Online (Sandbox Code Playgroud)[{"ID":1,"Product":"Pie","Days":1,"QTY":65},{"ID":2,"Product":"Melons","Days":5,"QTY":12}]