-2

일부 레코드를 저장하기 위해 XML 기반 .config 파일을 사용하고 있습니다. 내 XML은 다음과 같습니다 : 다음과 같이C에서 역 직렬화 할 때 InvalidOperationException 받기

<?xml version="1.0" encoding="utf-8"?> 
    <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <Configuration> 
     <Name>1st Week</Name> 
     <Binary> 
      <Field>field1</Field> 
      <Version>1.0</Version> 
     </Binary> 
     <Binary> 
      <Field>field2</Field> 
      <Version>2.0</Version> 
     </Binary> 
    </Configuration> 
     <Configuration> 
     <Name>2nd Week</Name> 
     <Binary> 
      <Field>field1</Field> 
      <Version>2.0</Version> 
     </Binary> 
     <Binary> 
      <Field>field2</Field> 
      <Version>4.0</Version> 
     </Binary> 
    </Configuration> 
</Data_List> 

내가 C# 코드를 사용하고 있습니다 :

public Binary 
{ 
public String Field; 
public String Version; 
} 

public Configuration 
{ 
public String Name; 
public List<Binary> Binary_List = new List<Binary>(); 

public GetfromXML() 
{ 
List<Configuration> lists = new List<Configuration>(); 
TextReader reader = new StreamReader("Data_List.config"); 
XmlSerializer serializer = new XmlSerializer(typeof(List<Configuration>)); 
lists=(List<Configuration>)serializer.Deserialize(reader); 
reader.Close(); 
} 

내가 XML 문서에 오류가있다 "라는 예외 (2 받고 있어요, 2) ". 누구나 도움이 될 수 있습니까?

+0

예외의 메시지 및 가능성있는 InnerException 속성을 살펴보면 정확히 무엇이 잘못 되었는 지 알려야합니다. 또한 어떻게 보이는지에 따라 태그가 필요하지 않습니다. –

+0

오류와 같은 * 더 자세한 정보를 제공하지 않습니까? 그림을 직렬화하는 것이 좋습니다. 먼저 XML 문서로 문서를로드 할 수 있습니까? –

+0

XML 데이터를 어떻게 생성 했습니까? – GETah

답변

3

제 생각에 당신의 모델이 잘 구조화되지 않았다고 생각합니다. 즉, serializer는 .xml을 읽는 방법을 알지 못합니다.

xml이 잘못되었습니다. 당신이 목록 < T가있을 때>은이있을 것입니다 : .XML에

<ArrayOfT></ArrayOfT> 

합니다. 여기에 어떻게해야할까요?

  1. 첫째, XML은 System.Xml.Serialization에서 속성을 사용해보십시오 (예 : [XmlArray()])

  2. 당신이 대신

    using(var filestream = new FileStream(//your uri, FIleMode.Open) 
    { 
    } 
    
    URI

    지적의하여 FileStream을 사용하는 것이 좋을 것이다
  3. 변수 대신 속성을 사용하십시오. 나중에 당신을 구속하기를 원할 수도 있습니다. 내 코드의

예는 내가 그 문제를 해결하기 위해 운영 방법 :

public ServiceMap Deserialize() 
    { 
     ServiceMap serviceMap = new ServiceMap(); 

     try 
     { 
      using (var fileStream = new FileStream(Settings.ServiceMapPath, FileMode.Open)) 
      { 
       XmlReaderSettings settings = new XmlReaderSettings(); 
       settings.IgnoreComments = true; 

       using (XmlReader reader = XmlReader.Create(fileStream, settings)) 
       { 
        serviceMap = _serializer.Deserialize(reader) as ServiceMap; 
       } 
      } 
     } 
     catch (FileNotFoundException) 
     { 
      MessageBox.Show("File 'ServiceMap.xml' could not be found!"); 
     } 

     return serviceMap; 
    } 

내 ServiceMap 클래스 :

[XmlRoot("ServiceMap")] 
public class ServiceMap 
{ 
    [XmlArray("Nodes")] 
    [XmlArrayItem("Node")] 
    public List<Node> Nodes = new List<Node>(); 

    [XmlArray("Groups")] 
    [XmlArrayItem("Group")] 
    public List<Group> Groups = new List<Group>(); 

    [XmlArray("Categories")] 
    [XmlArrayItem("Category")] 
    public List<Category> Categories = new List<Category>(); 
} 

편집 : 내 XML :

<?xml version="1.0" encoding="utf-8"?> 
<ServiceMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// www.w3.org/2001/XMLSchema"> 
    <Nodes> 
    <Node Name="Predrag"> 
    <Children> 
    <Child>dijete1</Child> 
    <Child>dijete2</Child> 
    <Child>dijete3</Child> 
    <Child>dijete4</Child> 
    </Children> 
    <Parents> 
    <Parent>roditelj1</Parent> 
    <Parent>roditelj2</Parent> 
    <Parent>roditelj3</Parent> 
    </Parents> 
    <Group Name="Grupa" /> 
    <Category Name="Kategorija" /> 
</Node> 
<Node Name="Tami"> 
    <Children> 
    <Child>dijete1</Child> 
    <Child>dijete2</Child> 
    </Children> 
    <Parents> 
    <Parent>roditelj1</Parent> 
    </Parents> 
    <Group Name="Grupa2" /> 
    <Category Name="Kategorija2" /> 
</Node> 

+0

사용중인 XML 파일을 pls로 제공 할 수 있습니까? 나는 모델이 구조화되어 있다고 느끼기 때문에 여전히 얻을 수 없다. –

+1

예, 여기 있습니다 (위의 게시물에서) :) – Bip