Witam mam pewien problem z deserializacją z xmla (tak mi się wydaje przynajmniej)
męczę się z tym już naprawdę długo i nie potrafię dojść do tego w czym problem
Program ma odczytać dane z pliku xml i zapisać w pliku csv i wyświetlić kilka rzeczy(ale nie w tym problem)
Kod wygląda tak:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Kolos
{
public abstract class Pracownicy
{
public string imie { get; set; }
public string nazwisko { get; set; }
public string pesel { get; set; }
public int staz { get; set; }
}
public class biurowi : Pracownicy, IComparable
{
public int zasadnicza { get; set; }
public biurowi(int a)
{
zasadnicza = a;
}
public int CompareTo(object obj)
{
if (obj == null)
{
throw new ArgumentException("null");
}
biurowi otherbiurowi = obj as biurowi;
if (otherbiurowi != null)
return this.staz.CompareTo(otherbiurowi.staz);
else
throw new ArgumentException("bład wejscia");
}
public string tostringCSV()
{
return this.imie + ";" + this.nazwisko + ";" + this.pesel + ";" + this.staz + ";" + this.zasadnicza;
}
public static void savebiurowi(List<biurowi> a)
{
List<biurowi> biurowy = new List<biurowi>();
biurowy = a;
if (!File.Exists(@"..\..\Data\biur.csv"))
{
File.Delete(@"..\..\Data\biur.csv");
}
FileStream fs = File.Create(@"..\..\Data\biur.csv");
fs.Close();
StreamWriter sw = new StreamWriter(@"..\..\Data\biur.csv");
Console.WriteLine();
foreach (biurowi I in biurowy)
{
sw.WriteLine(I.tostringCSV());
}
sw.Close();
}
public static double pensja(int zasadnicza, int staz)
{
double premia = staz * 2 * zasadnicza;
return zasadnicza + premia;
}
}
public class produkcyjni : Pracownicy, IComparable
{
public int godziny { get; set; }
public double stawka { get; set; }
public produkcyjni(int a, double b)
{
godziny = a;
stawka = b;
}
public int CompareTo(object obj)
{
if (obj == null)
{
throw new ArgumentException("null bro");
}
produkcyjni otherprodukcyjni = obj as produkcyjni;
if (otherprodukcyjni != null)
return this.staz.CompareTo(otherprodukcyjni.staz);
else
throw new ArgumentException("coś nie pykło bro");
}
public string tostringCSV()
{
return this.imie + ";" + this.nazwisko + ";" + this.pesel + ";" + this.staz + ";" + this.godziny + ";" + stawka;
}
public static void saveprodukcyjni(List<produkcyjni> a)
{
List<produkcyjni> produkcyjny = new List<produkcyjni>();
produkcyjny = a;
if (!File.Exists(@"..\..\Data\prod.csv"))
{
File.Delete(@"..\..\Data\prod.csv");
}
FileStream fs = File.Create(@"..\..\Data\prod.csv");
fs.Close();
StreamWriter sw = new StreamWriter(@"..\..\Data\prod.csv");
Console.WriteLine();
foreach (produkcyjni I in produkcyjny)
{
sw.WriteLine(I.tostringCSV());
}
sw.Close();
}
public static double pensja(int godziny, double stawka)
{
return godziny * stawka;
}
}
public class BiurowyCollection
{
public List<biurowi> Biurowy { get; set; }
public BiurowyCollection(List<biurowi> a)
{
Biurowy = a;
}
public BiurowyCollection() { }
// Serializacja
public void Save(string path)
{
var serializer = new XmlSerializer(typeof(BiurowyCollection));
using (var stream = new FileStream(path, FileMode.Create))
{
serializer.Serialize(stream, this);
}
}
// Deserializacja
public static BiurowyCollection Load(string path)
{
var serializer = new XmlSerializer(typeof(BiurowyCollection));
using (var stream = new FileStream(path, FileMode.Open))
{
return serializer.Deserialize(stream) as BiurowyCollection;
}
}
}
public class ProdukcyjnyCollection
{
public List<produkcyjni> Produkcyjny { get; set; }
public ProdukcyjnyCollection(List<produkcyjni> a)
{
Produkcyjny = a;
}
public ProdukcyjnyCollection() { }
// Serializacja
public void Save(string path2)
{
var serializer = new XmlSerializer(typeof(ProdukcyjnyCollection));
using (var stream = new FileStream(path2, FileMode.Create))
{
serializer.Serialize(stream, this);
}
}
// Deserializacja
public static ProdukcyjnyCollection Load(string path2)
{
var serializer = new XmlSerializer(typeof(ProdukcyjnyCollection));
using (var stream = new FileStream(path2, FileMode.Open))
{
return serializer.Deserialize(stream) as ProdukcyjnyCollection;
}
}
}
class Program
{
delegate double delegate1(int x1);
static void Main(string[] args)
{
List<biurowi> Biurowy = new List<biurowi>();
List<produkcyjni> Produkcyjny = new List<produkcyjni>();
string path = @"..\..\Data\biurowi.xml";
string path2 = @"..\..\Data\produkcyjni.xml";
var zdeserializowane = BiurowyCollection.Load(path);
var zdeserializowane2 = ProdukcyjnyCollection.Load(path2);
foreach (var element in zdeserializowane.Biurowy)
{
Biurowy.Add(element);
}
foreach (var element in zdeserializowane2.Produkcyjny)
{
Produkcyjny.Add(element);
}
foreach (biurowi i in Biurowy)
{
Console.WriteLine(i);
}
foreach (Pracownicy i in Produkcyjny)
{
Console.WriteLine(i);
}
Biurowy.Sort();
Produkcyjny.Sort();
biurowi.savebiurowi(Biurowy);
produkcyjni.saveprodukcyjni(Produkcyjny);
foreach (biurowi el in Biurowy)
{
Console.WriteLine(el.imie);
}
Console.ReadKey();
}
}
}
Kod trochę długi jak na wklejenie, ale inaczej tego nie zrobię a spoilerów nie ma :/
Mam problem z takim błędem w tym miejscu.
przeanalizowałem ten program kilka razy i jedyne co znalazłem to to że miałem pesel jako int (wychodzi poza zakres).
Pliki xml wyglądają tak:
1.
<?xml version="1.0"?>
<BiurowyCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Biurowi>
<Biurowy>
<imie>Marek</imie>
<nazwisko>Adamczyk</nazwisko>
<pesel>78091174632</pesel>
<staz>16</staz>
<zasadnicza>4500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Jolanta</imie>
<nazwisko>Adamska</nazwisko>
<pesel>94102211266</pesel>
<staz>1</staz>
<zasadnicza>2500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Mariola</imie>
<nazwisko>Cebula</nazwisko>
<pesel>83091174644</pesel>
<staz>16</staz>
<zasadnicza>3500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Janusz</imie>
<nazwisko>Dobry</nazwisko>
<pesel>81050719311</pesel>
<staz>14</staz>
<zasadnicza>4500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Ewelina</imie>
<nazwisko>Dymna</nazwisko>
<pesel>87041398661</pesel>
<staz>8</staz>
<zasadnicza>3500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Wiktoria</imie>
<nazwisko>Kus</nazwisko>
<pesel>88121047321</pesel>
<staz>5</staz>
<zasadnicza>3000</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Jan</imie>
<nazwisko>Markowski</nazwisko>
<pesel>92011312356</pesel>
<staz>3</staz>
<zasadnicza>2500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Tomasz</imie>
<nazwisko>Nowak</nazwisko>
<pesel>95102211252</pesel>
<staz>1</staz>
<zasadnicza>2500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Karolina</imie>
<nazwisko>Nowakowska</nazwisko>
<pesel>89121047321</pesel>
<staz>5</staz>
<zasadnicza>3500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Dominik</imie>
<nazwisko>Smak</nazwisko>
<pesel>80050719338</pesel>
<staz>14</staz>
<zasadnicza>3500</zasadnicza>
</Biurowy>
<Biurowy>
<imie>Anna</imie>
<nazwisko>Smyk</nazwisko>
<pesel>81090923541</pesel>
<staz>10</staz>
<zasadnicza>4000</zasadnicza>
</Biurowy>
</Biurowi>
</BiurowyCollection>
<?xml version="1.0"?>
<ProdukcyjnyCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Produkcyjni>
<Produkcyjny>
<imie>Marek</imie>
<nazwisko>Adamczyk</nazwisko>
<pesel>75091174657</pesel>
<staz>15</staz>
<godziny>160</godziny>
<stawka>18</stawka>
</Produkcyjny>
<Produkcyjny>
<imie>Adam</imie>
<nazwisko>Kowalski</nazwisko>
<pesel>90011312335</pesel>
<staz>5</staz>
<godziny>160</godziny>
<stawka>15</stawka>
</Produkcyjny>
<Produkcyjny>
<imie>Ewa</imie>
<nazwisko>Nowak</nazwisko>
<pesel>85041398642</pesel>
<staz>2</staz>
<godziny>150</godziny>
<stawka>12.5</stawka>
</Produkcyjny>
<Produkcyjny>
<imie>Natalia</imie>
<nazwisko>Nowakowska</nazwisko>
<pesel>87121047386</pesel>
<staz>6</staz>
<godziny>140</godziny>
<stawka>15</stawka>
</Produkcyjny>
<Produkcyjny>
<imie>Jan</imie>
<nazwisko>Tomaszewski</nazwisko>
<pesel>92102211231</pesel>
<staz>1</staz>
<godziny>178</godziny>
<stawka>12.5</stawka>
</Produkcyjny>
<Produkcyjny>
<imie>Adam</imie>
<nazwisko>Tyrkowski</nazwisko>
<pesel>80050719356</pesel>
<staz>10</staz>
<godziny>178</godziny>
<stawka>18</stawka>
</Produkcyjny>
</Produkcyjni>
</ProdukcyjnyCollection>
Będę bardzo wdzięczny za jakąkolwiek pomoc :D