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

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中获得的信息构建一个连接字符串),因此我不知道我需要获取哪些数据。这可能是数据库表的示例

表销售

  • ID:int,
  • 产品:nvarchar(100),
  • 天数:int
  • 数量:bigint

这可能是另一个例子:

桌上足球吧

  • ID:int,
  • 天数:int
  • 数量:bigint
  • 产品编号:int
  • Department_Id:int

如您所见,我不知道数据库是什么样的(这是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)

有没有人有可能解决这种情况的解决方案,或者只是对结构的指导?

dbc*_*dbc 5

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)

第一个输出:

[
  {
    "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}]
Run Code Online (Sandbox Code Playgroud)

  • @dbc我做了双重序列化。现在一切正常。感谢您在这里花时间。对此,我真的非常感激 (2认同)