pavlenis
pavlenis

Reputation: 45

C# Random JSON Object

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; }
    }
}

Screenshot1 Screenshot2

Upvotes: 2

Views: 2188

Answers (2)

tdragon
tdragon

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

Sergey Slepov
Sergey Slepov

Reputation: 2111

Try moving Random random = new Random(); outside the method body so it becomes a field rather than a local variable.

Upvotes: 0

Related Questions