2017-11-30 7 views
1

ID 목록이 들어있는 XML을 deserialize하려고하는데 "임시 클래스 (결과 = 1)를 생성 할 수 없습니다"오류가 발생합니다. 제발 도와주세요. 아래는 내 XML 파일 형식입니다 : 아래목록이 들어있는 XML 파일을 비 직렬화하는 방법은 무엇입니까?

<?xml version="1.0" encoding="UTF-8"?> 
<identifiers> 
<Module Name="Doors_Module1" Path="Doors_Module1 "> 
    <id value="16"/> 
    <id value="15"/> 
    <id value="14"/> 
    <id value="13"/> 
    <id value="12"/> 
    <id value="11"/> 
    <id value="10"/> 
    <id value="9"/> 
    <id value="17"/> 
    <id value="8"/> 
    <id value="7"/> 
    <id value="6"/> 
    <id value="5"/> 
    <id value="4"/> 
    <id value="3"/> 
    <id value="2"/> 
    <id value="1"/> 
</Module> 
</identifiers> 

이며 역 직렬화에 대한 내 수업이 XML : 고급의

public class HelperAllIdentifiers 
{ 
    [Serializable, XmlRoot("identifiers")] 
    public class identifiers 
    { 
     public Module Module { get; set; } 

    } 
    [XmlRoot("Module")] 
    public class Module 
    { 
     [XmlAttribute("Name")] 
     public string Name 
     { 
      get; 
      set; 
     } 

     [XmlArrayItem("id", Type = typeof(Attribute))] 
     public List<IdValue> FieldList;// { get; set; } 
     public Attribute[] ids { get; set; } 
    } 

    [XmlRoot("id")] 
    public class IdValue 
    { 
     [XmlAttribute("value")]// Type=typeof(Attribute))] 
     public string Value { get; set; } 
    } 
} 

감사합니다.

+0

내가 확실하지 오전이 근본 원인이지만, 당신의 모듈 클래스는 XML 파일의 내용과 다른 경우 : 속성 "에 응답 프로퍼티가 없습니다 통로". – royalTS

+0

사실 내 결과에는 "경로"속성이 필요하지 않습니다. 그래서 내 수업에서 그 속성을 사용하지 않는 것입니다. – Vivek

답변

0

코드 나를 위해 일한 태그 :

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 
using System.IO; 

namespace ConsoleWinForm 
{ 
    [XmlRoot(ElementName = "id")] 
    public class Id 
    { 
     [XmlAttribute(AttributeName = "value")] 
     public string Value { get; set; } 
    } 

    [XmlRoot(ElementName = "Module")] 
    public class Module 
    { 
     [XmlElement(ElementName = "id")] 
     public List<Id> Id { get; set; } 
     [XmlAttribute(AttributeName = "Name")] 
     public string Name { get; set; } 
     [XmlAttribute(AttributeName = "Path")] 
     public string Path { get; set; } 
    } 

    [XmlRoot(ElementName = "identifiers")] 
    public class Identifiers 
    { 
     [XmlElement(ElementName = "Module")] 
     public Module Module { get; set; } 
    } 

    public class Program 
    { 
     public static void Main() 
     { 
      string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?> 
          <identifiers> 
          <Module Name=""Doors_Module1"" Path=""Doors_Module1 ""> 
           <id value=""16""/> 
           <id value=""15""/> 
           <id value=""14""/> 
           <id value=""13""/> 
           <id value=""12""/> 
           <id value=""11""/> 
           <id value=""10""/> 
           <id value=""9""/> 
           <id value=""17""/> 
           <id value=""8""/> 
           <id value=""7""/> 
           <id value=""6""/> 
           <id value=""5""/> 
           <id value=""4""/> 
           <id value=""3""/> 
           <id value=""2""/> 
           <id value=""1""/> 
          </Module> 
          </identifiers>"; 

      using (var rdr = new StringReader(xml)) 
      { 
       var srlzr = new XmlSerializer(typeof(Identifiers)); 
       var result = srlzr.Deserialize(rdr) as Identifiers; 
      } 
     } 
    } 
} 
+0

Heres는 XML을 C# 클래스로 직렬화해야 할 때 수행합니다. http://xmltocsharp.azurewebsites.net/ –

+0

빠른 답장을 주셔서 감사합니다 prateek,하지만 지금 오류가 발생했습니다 : 처리되지 않은 예외 : System.InvalidOperationException : XML 문서 (2, 2)에 오류가 있습니다. ---> System.InvalidOperationException : 이 (가) 필요하지 않습니다. – Vivek

+0

실무 코드로 제 답변을 업데이트했습니다. –