2016-10-31 3 views
1

XML을 객체로 직렬화하려고하지만 XML을 올바르게 처리하지 못합니다. 개체에 작성자를 채우지는 않습니다. 제목과 저자 목록이 포함 된 기사로 구성된 객체를 반환하려고합니다. 작성자 목록은이 코드에 채워지지 않습니다. 이는 내 문제입니다. 이 XML 조작을 처음 접했을 때 제발 도와주세요.리스트를 사용하여 객체를 직렬화하는 XML

여기에서 문제를 확인할 수 있습니다. enter image description here

다음은 샘플 XML입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<MedlineCitationSet> 
<Article> 
    <ArticleTitle>Title 1</ArticleTitle> 
    <AuthorList> 
     <Author> 
      <LastName>Public</LastName> 
      <ForeName>J Q</ForeName> 
      <Initials>JQ</Initials> 
     </Author> 
     <Author> 
      <LastName>Doe</LastName> 
      <ForeName>John</ForeName> 
      <Initials>J</Initials> 
     </Author> 
    </AuthorList> 
</Article> 
<Article> 
    <ArticleTitle>Title 2</ArticleTitle> 
    <AuthorList> 
     <Author> 
      <LastName>Doe</LastName> 
      <ForeName>John</ForeName> 
      <Initials>J</Initials> 
     </Author> 
     <Author> 
      <LastName>Doe</LastName> 
      <ForeName>Jane</ForeName> 
      <Initials>J</Initials> 
     </Author> 
    </AuthorList> 
</Article> 
<Article> 
    <ArticleTitle>Title 3</ArticleTitle> 
    <AuthorList> 
     <Author> 
      <LastName>Doe</LastName> 
      <ForeName>Jane</ForeName> 
      <Initials>J</Initials> 
     </Author> 
     <Author> 
      <LastName>Public</LastName> 
      <ForeName>J Q</ForeName> 
      <Initials>JQ</Initials> 
     </Author> 
    </AuthorList> 
</Article> 
<Article> 
    <ArticleTitle>Title 4</ArticleTitle> 
    <AuthorList> 
     <Author> 
      <LastName>Smith</LastName> 
      <ForeName>John</ForeName> 
      <Initials>J</Initials> 
     </Author> 
     <Author> 
      <LastName>Doe</LastName> 
      <ForeName>John</ForeName> 
      <Initials>J</Initials> 
     </Author> 
    </AuthorList> 
</Article> 

여기 내 클래스 계층 구조입니다.

[XmlRoot("MedlineCitationSet")] 
public class MedlineCitationSet 
{ 
    [XmlElement("Article")] 
    public List<Article> Articles { get; set; } 
} 

[XmlRoot("Article")] 
public class Article 
{ 
    [XmlElement("ArticleTitle")] 
    public string ArticleTitle { get; set; } 

    [XmlElement("AuthorList")] 
    public List<Author> AuthorList { get; set; } 
} 

public class Author 
{ 
    [XmlElement("LastName")] 
    public string LastName { get; set; } 

    [XmlElement("ForeName")] 
    public string ForeName { get; set; } 

    [XmlElement("Initials")] 
    public string Initials { get; set; } 
} 

그리고 여기 내 비 직렬화 코드가 있습니다.

XmlSerializer serializer = new XmlSerializer(typeof(MedlineCitationSet)); 
using (FileStream fileStream = new FileStream(newPath + @"\XmlToRead\XmlToRead.xml", FileMode.Open)) 
{ 
    MedlineCitationSet result = (MedlineCitationSet)serializer.Deserialize(fileStream); 
} 

답변

3

이 부분 :

[XmlElement("AuthorList")] 
public List<Author> AuthorList { get; set; } 

하는 것을 나타냅니다 시리얼 취급 저자로 모든 <AuthorList> 요소, 대신 당신의 XML에 추가 <Author> 수준.

[XmlArray("AuthorList")] 
[XmlArrayItem("Author")] 
public List<Author> AuthorList { get; set; } 

PS :

이 이러한 방식으로 해결 될 수있다. 코드에 MedlineCitationSet을 생성하고 직렬화하면 현재 직렬화 매핑의 serializer가 무엇인지 쉽게 확인할 수 있습니다.

+0

이것은 내 문제를 해결합니다. 개체 특성이 성공적으로 채워집니다. 고마워. –

0

사용한다 [XMLTYPE ("MedlineCitationSet")] [XMLTYPE ("제")]와 [XMLTYPE ("저자")] 수업의 속성으로, 내가 그이어야 XML 정의가 누락 참조 Author 클래스.

+0

이러한 속성은 중복됩니다. 타입들이 서로를 직접 사용하기 때문에,'XmlSerializer'는 더 이상의 선언없이이 연결을 그릴 수 있습니다. – Georg

0

XmlArrayItem 속성을 AuthorList 속성에 추가해보십시오.

0

author 클래스의 xmlroot 특성을 pt하고 다시 시도하십시오. xmlserializer가 자동으로 수행 할 수 있다는 사실을 décaissé 속성에서 제거 할 수 있습니다.

관련 문제