如何在ExpandoObject Xamarin.forms中添加项目的动态数组

时间:2019-03-29 07:28:54

标签: c# json xamarin.forms uiswitch expandoobject

我想在ExpandoObject中添加动态选择的项目,然后以json值的形式打印。如果我选择了2个值,它只会打印最后一个值2次。我的问题是我选择它只打印了最后一个值。

我的代码: 声明

 dynamic output = new List<dynamic>();
 dynamic foo = new ExpandoObject();
 List<int> selected = new List<int>();

切换切换功能:

 private void Switch_Toggled(object sender, ToggledEventArgs e)
    {
        var switch1 = (Switch)sender;
        var human = (Human)switch1.BindingContext;
        var id = human.retail_modified_item_id;
        var name = human.name;
        var old_price = human.old_price;
        var new_price = human.new_price;
        if (switch1.IsToggled)
        {
            if (!selected.Contains(id))
            {
                selected.Add(id);
                foo.id = id;
                foo.name = name;
                foo.old_price=old_price;
                foo.new_price=new_price;
                output.Add(foo);                 
            }
        }
        else
        {
            if (selected.Contains(id)) selected.Remove(id);
        }
    }

打印Json值;

 string json = Newtonsoft.Json.JsonConvert.SerializeObject(output);
 Debug.WriteLine(json);

我的输出是:

  

[{“ id”:1000739,“ name”:“ Hashbrowns”,“ old_price”:0.99,“ new_price”:8.5},{“ id”:1000739,“ name”:“ Hashbrowns”,“ old_price” :0.99,“ new_price”:8.5}]

如果我选择2个值,则仅打印最后一个值2次。

1 个答案:

答案 0 :(得分:1)

  

dynamic foo = new ExpandoObject();

您在此处声明全局变量,因此第二次调用以下代码时,您将重新假定第一个foo并再次添加它,因此输出列表中有两个相同的项。

foo.id = id;
foo.name = name;
foo.old_price=old_price;
foo.new_price=new_price;
output.Add(foo);

您可以这样更改:

if (!selected.Contains(id))
    {
        selected.Add(id);
        dynamic foo = new ExpandoObject(); // local variables
        foo.id = id;
        foo.name = name;
        foo.old_price=old_price;
        foo.new_price=new_price;
        output.Add(foo);                 
    }