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

이 XML이 있습니다. XmlSerializer 를 사용하여 클래스를 직렬화 해제하려면 클래스를 어떻게 모델링해야합니까?  객체?


  • 답변 # 1

    수업은 다음과 같아야합니다

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

  • 답변 # 2

    위의 의견은 정확합니다. 데코레이터가 없습니다. 일반 디시리얼라이저를 원한다면 이것을 사용할 수 있습니다.

       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);
    
    

  • 이전 C # ( NET)을 사용하여 프로그래밍 방식으로 webconfig 변경
  • 다음 java - 클래스 경로에서 와일드 카드를 사용하여 여러 항아리를 추가하는 방법은 무엇입니까?