Вопрос по c# – Как десериализовать XML для объекта [дубликата]

93

This question already has an answer here:

<StepList>
  <Step>
    <Name>Name1</Name>
    <Desc>Desc1</Desc>
  </Step>
  <Step>
    <Name>Name2</Name>
    <Desc>Desc2</Desc>
  </Step>
</StepList>

У меня есть этот XML, Как я должен смоделировать класс, чтобы иметь возможность десериализовать его, используяXmlSerializer объект?

Ваш Ответ

2   ответа
24

Если вы хотите универсальный десериализатор, вы можете использовать это.

    public static T DeserializeXMLFileToObject<T>(string XmlFilename)
    {
        T returnObject = default(T);
        if (string.IsNullOrEmpty(XmlFilename)) return default(T);

        try
        {
            StreamReader xmlStream = new StreamReader(XmlFilename);
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            returnObject = (T)serializer.Deserialize(xmlStream);
        }
        catch (Exception ex)
        {
            ExceptionLogger.WriteExceptionToConsole(ex, DateTime.Now);
        }
        return returnObject;
    }

Тогда вы бы назвали это так:

MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath);
184

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

Вот мой тест-код.

string testData = @"<StepList>
                        <Step>
                            <Name>Name1</Name>
                            <Desc>Desc1</Desc>
                        </Step>
                        <Step>
                            <Name>Name2</Name>
                            <Desc>Desc2</Desc>
                        </Step>
                    </StepList>";

XmlSerializer serializer = new XmlSerializer(typeof(StepList));
using (TextReader reader = new StringReader(testData))
{
    StepList result = (StepList) serializer.Deserialize(reader);
}

Если вы хотите прочитать текстовый файл, вы должны загрузить файл в FileStream и десериализовать это.

using (FileStream fileStream = new FileStream("<PathToYourFile>", FileMode.Open)) 
{
    StepList result = (StepList) serializer.Deserialize(fileStream);
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded[XmlElement("Step")]Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/26741192/466577
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы