Как добавить динамический массив элемента в ExpandoObject Xamarin.forms - PullRequest
0 голосов
/ 29 марта 2019

Я хочу добавить динамически выбранные элементы в 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 Ответ

1 голос
/ 01 апреля 2019

dynamic foo = new ExpandoObject ();

здесь вы объявляете глобальные переменные, поэтому во второй раз, когда вы вызываете следующий код, вы повторно принимаете первый foo и добавляете его снова, так что в выходном списке List есть два идентичных элемента.

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);                 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...