C#动态扩展对象数组

C#动态扩展对象数组,c#,C#,请告诉我,我如何获得这样的json: dynamic packet = new ExpandoObject(); packet.type = "somethink"; packet.user = 12345; packet.nets[0].amout = 123; packet.nets[0].lower = 0; packet.nets[1].amout = 345; packet.nets[1].lower = 1; stri

请告诉我,我如何获得这样的json:

    dynamic packet = new ExpandoObject();
    packet.type = "somethink";
    packet.user = 12345;

    packet.nets[0].amout = 123;
    packet.nets[0].lower = 0;
    packet.nets[1].amout = 345;
    packet.nets[1].lower = 1;
    string input = Newtonsoft.Json.JsonConvert.SerializeObject(packet);
packet.nets = new dynamic[2];
它不工作,错误: System.Core.dll中类型为“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的未处理异常

有关详细信息:“System.Dynamic.ExpandoObject”不包含“nets”的定义


谢谢。

ExpandoObject
的动态对象。其余属性应该是其他
ExpandoObject
实例或常规对象、数组、集合

例如:

packet.nets = new[] 
{
     new { amount = 123, lower = 0 },
     new { amount = 345, lower = 1 }
}
或:

packet.nets=new[]
{
新字典{{“金额”,345},{“较低”,0},
新字典{{“金额”,123},{“较低”,1}
}

还有许多其他方法,包括使用具体类的实例。

首先需要声明网络。比如说

packet.nets=新字典()

然后需要实例化网络的实例

packet.nets[0]=new{amount=123,lower=0}

结果是

dynamic packet = new ExpandoObject();
packet.type = "somethink";
packet.user = 12345;

packet.nets = new Dictionary<int, dynamic>();
packet.nets[0] = new { amount = 123, lower = 0 };
packet.nets[1] = new { amount = 345, lower = 1 };
dynamic packet=newexpandoobject();
packet.type=“somethink”;
packet.user=12345;
packet.nets=新字典();
packet.nets[0]=new{amount=123,lower=0};
packet.nets[1]=new{amount=345,lower=1};

首先,您需要在
数据包
对象中创建
网络
,如下所示:

    dynamic packet = new ExpandoObject();
    packet.type = "somethink";
    packet.user = 12345;

    packet.nets[0].amout = 123;
    packet.nets[0].lower = 0;
    packet.nets[1].amout = 345;
    packet.nets[1].lower = 1;
    string input = Newtonsoft.Json.JsonConvert.SerializeObject(packet);
packet.nets = new dynamic[2];
并初始化
网络
中的对象,如果您也想使用“ExpandooObject”:

packet.nets[0] = new ExpandoObject();
packet.nets[1] = new ExpandoObject();
完成后,完成代码:

dynamic packet = new ExpandoObject();
packet.type = "somethink";
packet.user = 12345;

packet.nets = new dynamic[2];

packet.nets[0] = new ExpandoObject();
packet.nets[0].amout = 123;
packet.nets[0].lower = 0;

packet.nets[1] = new ExpandoObject();
packet.nets[1].amout = 345;
packet.nets[1].lower = 1;            

string input = Newtonsoft.Json.JsonConvert.SerializeObject(packet);

为什么这些值应该是动态的?@MatíasFidemraizer我想它们可以是对象,相同的区别。您的代码自动启动数组可能比将其声明为字典要好。唯一的问题是您可以删除
对象
部分,编译器将假定它。我不知道你为什么投了反对票,我投了反对票。嘿,是的,我已经把代码改成了按用法进行类型推断。在我的例子中,如果以后需要访问,我会将值声明为
dynamic
。如果只是为了序列化,谁在乎呢,
object
能很好地完成有关downvoter的工作。。。也许用户按错了按钮,或者谁知道呢;P