Reputation: 45
I have created quiz and I want to show random json object values on buttons when clicked.Buttons contain values from JSON Objects.How to get random json object?
JSON File: http://pastebin.com/nj38aP7H
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
namespace Slagalica
{
public partial class Asocijacije : MetroFramework.Forms.MetroForm
{
public Asocijacije()
{
InitializeComponent();
}
List<MyModel> data;
private void Asocijacije_Load(object sender, EventArgs e)
{
data = GetJsonFromFile(@"MyData1.json");
}
private List<MyModel> GetJsonFromFile(string path)
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(File.ReadAllText(path))))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<MyModel>));
List<MyModel> data = (List<MyModel>)serializer.ReadObject(stream);
return data;
}
}
private void button_Click(object sender, EventArgs e)
{
Random random = new Random();
int count = 0;
int i = 0;
MyModel model = data[0];
Button btn = sender as Button;
switch (btn.Text.ToString())
{
//A
case "A":
List<string> A = model.a5;
count = A.Count;
i = random.Next(0, count);
btn.Text = A[i];
break;
case "A1":
string A1 = model.a1;
btn.Text = A1;
break;
case "A2":
string A2 = model.a2;
btn.Text = A2;
break;
case "A3":
string A3 = model.a3;
btn.Text = A3;
break;
case "A4":
string A4 = model.a4;
btn.Text = A4;
break;
//B
case "Б":
List<string> B = model.b5;
count = B.Count;
i = random.Next(0, count);
btn.Text = B[i];
break;
case "Б1":
string B1 = model.b1;
btn.Text = B1;
break;
case "Б2":
string B2 = model.b2;
btn.Text = B2;
break;
case "Б3":
string B3 = model.b3;
btn.Text = B3;
break;
case "Б4":
string B4 = model.b4;
btn.Text = B4;
break;
//C
case "В":
List<string> C = model.c5;
count = C.Count;
i = random.Next(0, count);
btn.Text = C[i];
break;
case "В1":
string C1 = model.c1;
btn.Text = C1;
break;
case "В2":
string C2 = model.c2;
btn.Text = C2;
break;
case "В3":
string C3 = model.c3;
btn.Text = C3;
break;
case "В4":
string C4 = model.c4;
btn.Text = C4;
break;
//D
case "Г":
List<string> D = model.d5;
count = D.Count;
i = random.Next(0, count);
btn.Text = D[i];
break;
case "Г1":
string D1 = model.d1;
btn.Text = D1;
break;
case "Г2":
string D2 = model.d2;
btn.Text = D2;
break;
case "Г3":
string D3 = model.d3;
btn.Text = D3;
break;
case "Г4":
string D4 = model.d4;
btn.Text = D4;
break;
//???
case "???":
List<string> RR = model.rr;
count = RR.Count;
i = random.Next(0, count);
btn.Text = RR[i];
break;
}
}
private void button22_Click(object sender, EventArgs e)
{
}
}
}
Class MyModel:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace Slagalica
{
[DataContract]
class MyModel
{
[DataMember]
public string a1 { get; set; }
[DataMember]
public string a2 { get; set; }
[DataMember]
public string a3 { get; set; }
[DataMember]
public string a4 { get; set; }
[DataMember]
public List<string> a5 { get; set; }
[DataMember]
public string b1 { get; set; }
[DataMember]
public string b2 { get; set; }
[DataMember]
public string b3 { get; set; }
[DataMember]
public string b4 { get; set; }
[DataMember]
public List<string> b5 { get; set; }
[DataMember]
public string c1 { get; set; }
[DataMember]
public string c2 { get; set; }
[DataMember]
public string c3 { get; set; }
[DataMember]
public string c4 { get; set; }
[DataMember]
public List<string> c5 { get; set; }
[DataMember]
public string d1 { get; set; }
[DataMember]
public string d2 { get; set; }
[DataMember]
public string d3 { get; set; }
[DataMember]
public string d4 { get; set; }
[DataMember]
public List<string> d5 { get; set; }
[DataMember]
public List<string> rr { get; set; }
}
}
Upvotes: 2
Views: 2188
Reputation: 3329
You need to change the line MyModel model = data[0];
to MyModel model = data[random.Next(0, data.Count)];
. Also, as Sergey Slepov mentioned, it would be good to move Random
instance to the field.
Upvotes: 1
Reputation: 2111
Try moving Random random = new Random();
outside the method body so it becomes a field rather than a local variable.
Upvotes: 0