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

私はエラーが2は、(XML文書であります」と言った例外を取得しています2)」。 誰も助けてくれる?

+0

例外のMessageとおそらくInnerExceptionプロパティを見てください。何が間違っているのか正確に言わなければなりません。 また、どのように見えても、タグは期待できません。 –

+0

エラーとは何か、*それ以上の情報はありませんか?私はあなたが絵のシリアル化を取ることをお勧めします - あなたはXMLドキュメントとして読み込むことができますか? –

+0

どのようにしてXMLデータを生成しましたか? – GETah

答えて

3

私の問題は、あなたのモデルが構造化されていないということです。言い換えれば、シリアライザは.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>(); 
} 

EDIT:私の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

関連する問題