Hej, potrzebuję zbudować statyczną metodę generyczną która zdeserializuje xml na liste obiektów i wyświetli je w pętli. O ile wiem coś niecoś na temat każdego rzeczownika tego taska o tyle złączenie ich do kupy mnie przerasta, zbudowałby ktoś w celu pomocy jakiś przykład?
Statyczna metoda generyczna deserializująca XML
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Jastrzębie-Zdrój
- Postów: 2180
public static void SerializeXML<T>(T obj, string filePath)
{
XmlSerializer xml = new XmlSerializer(typeof(T));
TextWriter tw = new StreamWriter(filePath);
xml.Serialize(tw, obj);
tw.Dispose();
tw.Close();
}
public static T DeserializeXML<T>(string filePath)
{
XmlSerializer xml = new XmlSerializer(typeof(T));
StreamReader sr = new StreamReader(filePath, Encoding.UTF8);
T obj = (T)xml.Deserialize(sr);
sr.Dispose();
sr.Close();
return obj;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 4883
- robisz model na podstawie tego co masz w XMLu
przy takim XMLu
string testData = @"<StepList>
<Step>
<Name>Name1</Name>
<Desc>Desc1</Desc>
</Step>
<Step>
<Name>Name2</Name>
<Desc>Desc2</Desc>
</Step>
</StepList>";
model bedzie wygladal nastepujaco
[XmlRoot("StepList")]
public class StepList
{
[XmlElement("Step")]
public List<Step> Steps { get; set; }
}
public class Step
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Desc")]
public string Desc { get; set; }
}
pozniej na testData robisz
XmlSerializer serializer = new XmlSerializer(typeof(StepList));
using (TextReader reader = new StringReader(testData))
{
StepList result = (StepList) serializer.Deserialize(reader);
}
wtedy masz caly obiekt w result. Chyba potrafisz sobie poradzic z wyswietleniem listy?
jezeli chcesz z pliku to
using (FileStream fileStream = new FileStream("<PathToYourFile>", FileMode.Open))
{
StepList result = (StepList) serializer.Deserialize(fileStream);
}
a te wszystkie informacje zdobylem robiac nastepujace kroki
- wszedlem na google.com
- wpisalem xml to model C#
- otworzylem pierwszy link https://stackoverflow.com/questions/10518372/how-to-deserialize-xml-to-object
teraz jak masz dla jednego przypadku, pomysl jak zrobic to generycznie
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
AdamWox napisał(a):
public static void SerializeXML<T>(T obj, string filePath) { XmlSerializer xml = new XmlSerializer(typeof(T)); TextWriter tw = new StreamWriter(filePath); xml.Serialize(tw, obj); tw.Dispose(); tw.Close(); } public static T DeserializeXML<T>(string filePath) { XmlSerializer xml = new XmlSerializer(typeof(T)); StreamReader sr = new StreamReader(filePath, Encoding.UTF8); T obj = (T)xml.Deserialize(sr); sr.Dispose(); sr.Close(); return obj; }
To nie jest to o co pytałem a poza tym jak ktoś nie wie co się dzieję to może wprowadzić w błąd, nie jest mi potrzebny serializer bo wklejam specjlanie w VS plik xml i mam gotowe klasy
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Jastrzębie-Zdrój
- Postów: 2180
Świetnie, to co potrzebujesz? Bo już nie rozumiem...
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
fasadin napisał(a):
- robisz model na podstawie tego co masz w XMLu
przy takim XMLu
string testData = @"<StepList> <Step> <Name>Name1</Name> <Desc>Desc1</Desc> </Step> <Step> <Name>Name2</Name> <Desc>Desc2</Desc> </Step> </StepList>";model bedzie wygladal nastepujaco
[XmlRoot("StepList")] public class StepList { [XmlElement("Step")] public List<Step> Steps { get; set; } } public class Step { [XmlElement("Name")] public string Name { get; set; } [XmlElement("Desc")] public string Desc { get; set; } }pozniej na
testDatarobiszXmlSerializer serializer = new XmlSerializer(typeof(StepList)); using (TextReader reader = new StringReader(testData)) { StepList result = (StepList) serializer.Deserialize(reader); }wtedy masz caly obiekt w result. Chyba potrafisz sobie poradzic z wyswietleniem listy?
jezeli chcesz z pliku to
using (FileStream fileStream = new FileStream("<PathToYourFile>", FileMode.Open)) { StepList result = (StepList) serializer.Deserialize(fileStream); }a te wszystkie informacje zdobylem robiac nastepujace kroki
- wszedlem na google.com
- wpisalem xml to model C#
- otworzylem pierwszy link https://stackoverflow.com/questions/10518372/how-to-deserialize-xml-to-object
teraz jak masz dla jednego przypadku, pomysl jak zrobic to generycznie
a co jeśli plik xml jest bardzo duży ? wtedy model też tworzyć ręcznie?