Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML反序列化_C#_.net_Xml_Format_Serialization - Fatal编程技术网

C# XML反序列化

C# XML反序列化,c#,.net,xml,format,serialization,C#,.net,Xml,Format,Serialization,我尝试使用xsd.exe工具为 遵循Oracle生成的xml示例,但始终无法正确获取 当我尝试将oracle xml元素名称更改为类名称时, 具体地说,我不确定如何为的行集和行部分执行此操作 它 我敢肯定,对于序列化/反序列化业务来说,这是一项非常新的工作 这对于有更多经验的人来说是非常容易实现的 对它的了解,可以帮我一些忙吗 我为部门和员工创建了两个类: [XmlRoot("ROWSET")] class Department { [XmlElement("DEPARTMENT_

我尝试使用xsd.exe工具为 遵循Oracle生成的xml示例,但始终无法正确获取 当我尝试将oracle xml元素名称更改为类名称时, 具体地说,我不确定如何为的行集和行部分执行此操作 它

我敢肯定,对于序列化/反序列化业务来说,这是一项非常新的工作 这对于有更多经验的人来说是非常容易实现的 对它的了解,可以帮我一些忙吗

我为部门和员工创建了两个类:

[XmlRoot("ROWSET")] 
class Department 
{ 
    [XmlElement("DEPARTMENT_ID")] 
    string DepID { set; get; } 
    [XmlElement("DEPARTMENT_NAME")] 
    string DepName { set; get; } 
    [XmlElement("EMPLOYEES")] 
    Employee[] Employees { set; get; } 
} 
class Employee 
{ 
    [XmlElement("EMP_ID")] 
    string DepID { set; get; } 
    [XmlElement("EMP_NAME")] 
    string DepName { set; get; } 
}
但这不起作用,在运行时它抱怨找不到行 元素,老实说,我不知道如何在代码中告诉 忽略它并从下一个节点开始。我知道xsd.exe会对我有所帮助,但它会生成大量不需要的数据,并让我手动对名称进行排序。我会的 我真的很想学习如何在不依赖自动化的情况下做到这一点 工具

非常感谢,

玛雅人


1.
销售额
12
弗莱德
13
霍恩
2.
营销

您可能需要创建一个额外的类
。还要确保类和属性是公共的。下面是一个示例,说明如何使用以下命令将
部门
实例序列化为给定的XML结构:

并反序列化回
部门
实例:

var xml = 
@"<?xml version=""1.0""?>
<ROWSET>
  <ROW>
    <DEPARTMENT_ID>1</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME>
    <EMPLOYEES>
      <EMP>
        <EMP_ID>12</EMP_ID>
        <EMP_NAME>Fred</EMP_NAME>
      </EMP>
      <EMP>
        <EMP_ID>13</EMP_ID>
        <EMP_NAME>Hohn</EMP_NAME>
      </EMP>
    </EMPLOYEES>
  </ROW>
  <ROW>
    <DEPARTMENT_ID>2</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <EMPLOYEES></EMPLOYEES>
  </ROW>
</ROWSET>";

using (var reader = new StringReader(xml))
{
    var department = (Department)serializer.Deserialize(reader);
}
var-xml=
@"
1.
销售额
12
弗莱德
13
霍恩
2.
营销
";
使用(var reader=newstringreader(xml))
{
var department=(department)序列化程序。反序列化(reader);
}

您需要声明一个可以存储部门集合的类。查看XmlArrayAttribute。
[XmlRoot("ROWSET")]
public class Department
{
    [XmlElement("ROW")]
    public Row[] Rows { get; set; }
}

public class Row
{
    [XmlElement("DEPARTMENT_ID")]
    public string DepID { set; get; }

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

    [XmlArray("EMPLOYEES")]
    [XmlArrayItem("EMP")]
    public Employee[] Employees { set; get; }
}

public class Employee
{
    [XmlElement("EMP_ID")]
    public string EmpID { set; get; }

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

class Program
{
    static void Main()
    {
        var dep = new Department
        {
            Rows = new[] 
            {
                new Row 
                {
                    DepID = "1",
                    DepName = "Sales",
                    Employees = new[] 
                    {
                        new Employee 
                        {
                            EmpID = "12",
                            EmpName = "Fred"
                        },
                        new Employee 
                        {
                            EmpID = "13",
                            EmpName = "Hohn"
                        }
                    }
                },
                new Row 
                {
                    DepID = "2",
                    DepName = "Marketing",
                }
            }
        };
        var serializer = new XmlSerializer(dep.GetType());
        serializer.Serialize(Console.Out, dep);
    }
var xml = 
@"<?xml version=""1.0""?>
<ROWSET>
  <ROW>
    <DEPARTMENT_ID>1</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME>
    <EMPLOYEES>
      <EMP>
        <EMP_ID>12</EMP_ID>
        <EMP_NAME>Fred</EMP_NAME>
      </EMP>
      <EMP>
        <EMP_ID>13</EMP_ID>
        <EMP_NAME>Hohn</EMP_NAME>
      </EMP>
    </EMPLOYEES>
  </ROW>
  <ROW>
    <DEPARTMENT_ID>2</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <EMPLOYEES></EMPLOYEES>
  </ROW>
</ROWSET>";

using (var reader = new StringReader(xml))
{
    var department = (Department)serializer.Deserialize(reader);
}