Klasseninstanzen basierend auf dynamischen Objektlisten erstellen

Ich bin mir nicht sicher, ob ich meinen Code sauberer machen könnte, indem ich eine separate Klasse für den Prozess erstelle, den ich ausführ

Mein Hauptziel ist es, eine JSON-Datei aus Daten zu erstellen, die mit HtmlAgilityPack erfasst wurden. Ich habe in den letzten Tagen mit diesem Problem gearbeitet, aber es ist mir gelungen, einen Weg zu finden, dies zu tun. Ich habe es geschafft, eine JSON-Datei mit den abgerufenen Informationen zu erstellen, aber die Informationen wurden nicht in separate Objekte in einem Objektarray aufgeteilt. Stattdessen wurden alle Daten zu einem Objekt zusammengefasst.

Dies geschah, weil ich die Objekte nie mit den analysierten HTML-Daten in der Zeichenfolgenliste erstellt habe. Anstatt separate Listen zu erstellen und zu kombinieren, muss ich eine Liste von Objekten erstellen, die aus den analysierten HTML-Daten erstellt wurden, und sie einer Liste hinzufügen.

Um diese hypothetische Methode zu testen, habe ich 3 Klasseninstanzen erstellt und ihnen Werte gegeben, um festzustellen, ob die JSON-Datei das gewünschte Array von Objekten erstellt hat. Beim Testen wurde das gewünschte JSON-Array von Objekten erstellt.

JSON Erstellt:

[{"FavsGTS":"GT1","FavsGPICS":"GP1","FavsRNS":"RN1","FavsPIS":"PI1","FavsIsOns":"true"},
{"FavsGTS":"GT2","FavsGPICS":"GP2","FavsRNS":"RN2","FavsPIS":"PI2","FavsIsOns":"false"},
{"FavsGTS":"GT3","FavsGPICS":"GP3","FavsRNS":"RN3","FavsPIS":"PI3","FavsIsOns":"true"}]

Nun versuche ich herauszufinden, wie ich Instanzen basierend auf den gesammelten HTML-Daten dynamisch erstellen kann.

Was ich vorhatte, war etwas zu tun wie:

gamertagsFav = new List<string>(FavsGTS.Count);
            gamertagsFav.AddRange(FavsGTS);

            foreach(string gamertagfav in gamertagsFav)
            {
                //creates a class instance and adds the parsed data in the same order.   
            }

Ein Beispiel für eine generierte Instanz wäre wie folgt:

gamerprofileFav gpfav1 = new gamerprofileFav()
            {
                FavsGTS = "gt1",
                FavsGPICS = "gpic1",
                FavsRNS = "rn1",
                FavsPIS = "pi1",
                FavsIsOns = "ison1"
            };

Dies ist möglich, weil alle analysierten Daten in derselben Reihenfolge vorliegen.

Mein Code ist ein bisschen chaotisch, aber es ist wie Brache:

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 HtmlAgilityPack;
using System.Web.Script.Serialization;
using Newtonsoft.Json;
using System.IO;

namespace Parser_Test_1._0
{
    public partial class Form1 : Form
    {
        public List<string> FavsGTS { get; private set; }
        public List<string> FavsGPICS { get; private set; }
        public List<string> FavsRNS { get; private set; }
        public List<string> FavsPIS { get; private set; }
        public List<string> FavsIsOns { get; private set; }
        public List<string> allPlayers { get; private set; }
        public List<string> gamertagsFav { get; private set; }

        public Form1()
        {
            InitializeComponent();
        }

        public class gamerprofileFav
        {
            public string FavsGTS { get; set; }
            public string FavsGPICS { get; set; }
            public string FavsRNS { get; set; }
            public string FavsPIS { get; set; }
            public string FavsIsOns { get; set; }

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.Load(@"C:\Users\josec\Documents\Visual Studio 2015\Projects\THE XBOX PROJECT\Parser-Test-1.0\Parser-Test-1.0\bin\Debug\xbFrSourceCode.txt");

            string datacollected1 = doc.DocumentNode.SelectNodes("//*[@id=\"favoritesContent\"]/div[2]/div[2]/ul")[0].InnerHtml;
            string datacollected2 = doc.DocumentNode.SelectNodes("//*[@id=\"friendsContent\"]/div[2]/div[2]")[0].InnerHtml;
            label1.Text = datacollected1;
            label2.Text = datacollected2;

            //StreamWriter sw = new StreamWriter("datacollected1.txt");
            //sw.Write(datacollected1);
            //sw.Close();

            //Gamertags
            HtmlAgilityPack.HtmlDocument favs = new HtmlAgilityPack.HtmlDocument();
            favs.LoadHtml(datacollected1);

            FavsGTS = new List<string>();
            HtmlNodeCollection gts = favs.DocumentNode.SelectNodes("//li[@data-gamertag]");
            foreach (var gt in gts)
            {
                string datagamertag = gt.Attributes["data-gamertag"].Value;
                FavsGTS.Add(datagamertag);
            }

            listBox1.DataSource = FavsGTS;

            FavsGPICS = new List<string>();
            HtmlNodeCollection gpics = favs.DocumentNode.SelectNodes("//li/a[1]/img[1][@src]");
            foreach (var gpic in gpics)
            {
                string datagpic= gpic.Attributes["src"].Value;
                FavsGPICS.Add(datagpic);
            }

            listBox2.DataSource = FavsGPICS;

            FavsRNS = new List<string>();
            HtmlNodeCollection rns = favs.DocumentNode.SelectNodes("//li/div[2]/div[2]/div[1]/div[1]");
            foreach (var rn in rns)
            {
                string datarn = rn.InnerText;
                FavsRNS.Add(datarn);
            }

            listBox3.DataSource = FavsRNS;

            FavsPIS = new List<string>();
            HtmlNodeCollection pis = favs.DocumentNode.SelectNodes("//li/div[2]/div[2]/div[1]/div[2]");
            foreach (var pi in pis)
            {
                string datapi = pi.InnerText;
                FavsPIS.Add(datapi);
            }

            listBox4.DataSource = FavsPIS;

            FavsIsOns = new List<string>();
            HtmlNodeCollection isons = favs.DocumentNode.SelectNodes("//li[@data-isonline]");
            foreach (var ison in isons)
            {
                string dataison = ison.Attributes["data-isonline"].Value;
                FavsIsOns.Add(dataison);
            }

            listBox5.DataSource = FavsIsOns;
            //Test
            gamertagsFav = new List<string>(FavsGTS.Count);
            gamertagsFav.AddRange(FavsGTS);

            foreach(string gamertagfav in gamertagsFav)
            {

            }



            //Merge
            allPlayers = new List<string>(FavsGTS.Count + FavsGPICS.Count + FavsRNS.Count + FavsPIS.Count + FavsIsOns.Count);
            allPlayers.AddRange(FavsGTS);
            allPlayers.AddRange(FavsGPICS);
            allPlayers.AddRange(FavsRNS);
            allPlayers.AddRange(FavsPIS);
            allPlayers.AddRange(FavsIsOns);

            //GpsFav //+Start+
            gamerprofileFav gpfav1 = new gamerprofileFav()
            {
                FavsGTS = "GT1",
                FavsGPICS = "GP1",
                FavsRNS = "RN1",
                FavsPIS = "PI1",
                FavsIsOns = "true"
            };
            gamerprofileFav gpfav2 = new gamerprofileFav()
            {
                FavsGTS = "GT2",
                FavsGPICS = "GP2",
                FavsRNS = "RN2",
                FavsPIS = "PI2",
                FavsIsOns = "false"
            };
            gamerprofileFav gpfav3 = new gamerprofileFav()
            {
                FavsGTS = "GT3",
                FavsGPICS = "GP3",
                FavsRNS = "RN3",
                FavsPIS = "PI3",
                FavsIsOns = "true"
            };

            List<gamerprofileFav> gpfavs = new List<gamerprofileFav>();
            gpfavs.Add(gpfav1);
            gpfavs.Add(gpfav2);
            gpfavs.Add(gpfav3);
            //GgsFav //-END-

            listBox6.DataSource = allPlayers;
            listBox7.DataSource = gamertagsFav;

            //JSON Serialize
            //string data = JsonConvert.SerializeObject(gpfavs);
            //File.WriteAllText("data.json", data);
        }
        public class gpsFav
        {



        }

    }
}

Dies ist die Form1 beim Ausführen:

Die Daten in den 5 kleinen Listen sind die Daten, die ich den generierten Instanzen in derselben Reihenfolge zuweisen möchte, in der sie angezeigt werden. Auf diese Weise kann ich aus diesen generierten Instanzen eine Liste erstellen, die ich in eine JSON-Datei serialisieren kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage