You need to understand how reference variables work
for (int i = 0; i < data ["quiz_list"].Count; i++) {
Obj1.Clear ();
MyQuizList.Add (Obj1);
There is only one copy of Obj1, and you are clearing its data, setting its data and adding it to the list, however you are only adding the same object multiple times, you don't have different copies of the item.
Imagine you have a bag and inside that bag you put "square", and you get someone to hold that bad. You then clear the bag so you remove square and you put "circle" in it and tell someone else to hold the bag. So you have one bag that both people are holding and that bag holds a circle.
What you really want to do is create a new bag rather than clear your existing one, so you have one bag with a square and one with a circle. So replace Clear with creating a new instance.
for (int i = 0; i < data ["quiz_list"].Count; i++) {
Obj1 = new QuizSearchListVariable();
MyQuizList.Add (Obj1);