2012-05-09 28 views

Trả lời

136

lớp của bạn nên thích như thế này

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

Đây là testcode tôi.

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

Nếu bạn muốn đọc tệp văn bản, bạn nên tải tệp vào Tệp tập tin và deserialize tệp này.

using (FileStream fileStream = new FileStream("<PathToYourFile>",FileMode.Open)) 
{ 
    StepList result = (StepList) serializer.Deserialize(fileStream); 
} 
+1

[XmlElement ("Bước")] là chìa khóa - để loại bỏ "bước" làm tổ trong XML ( ...) – avs099

+1

tôi không hiểu. Chắc chắn '[XmlElement (" Bước ")]' là chìa khóa, là đúng. Ý của bạn là "- để xóa" bước "lồng trong XML ( ...)". Cảm ơn bạn! – dknaack

+1

nó không được cho bạn nhưng đối với những người khác có thể đọc câu trả lời này :) nếu bạn không có [XmlElement] sau đó kết quả XML sẽ là như thế: Name1 name2. Nó đã cho tôi một thời gian một số thời gian trước đây để tìm ra cách để loại bỏ khối bên ngoài. – avs099

12

Nhận xét ở trên là chính xác. Bạn đang thiếu trang trí. Nếu bạn muốn một deserializer chung bạn có thể sử dụng này.

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

Sau đó, bạn muốn gọi nó là như thế này:

MyObjType MyObj = DeserializeXMLFileToObject<MyObjType>(FilePath); 
Các vấn đề liên quan