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?
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;
}
- 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
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
Świetnie, to co potrzebujesz? Bo już nie rozumiem...
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
testData
robiszXmlSerializer 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?
nie musisz komentowac kazdego postu na ktory odpowiadasz...
w Visual Studio masz cos takiego jak
Edit => Paste Special => XML as Classes
i masz caly model. Chociaz reczne poprawki i tak mile widziane