1

我有以下xml:

<state>
<groups>
    <group id='1' name='Basic Search Options'>
        <control name='Building' label='In' display='true' configurable='false'/>
        <control name='SearchType' label='For' display='true' configurable='false'/>
        <control id='1' default='C' name='Search By' label='By'>
            <option searchtype='C' searchmode='Cnumber' value='CNumber' label='C Number' display='true'/>
            <option searchtype='C' searchmode='crossrefnumber' value='CNumber1' label='Cross Reference Number' display='true'/>
            <option searchtype='P' searchmode=''  value='CaseNumber' label='P Name' display='true'/>
            <option searchtype='P' searchmode='' value='CaseNumber' label='A Name' display='false'/>
        </control>
    </group>
    <group id='2' name='Advanced Search Options'>
        <control name='Ctatus' label='C Status' display='true'/>
        <control name='DateFiled' label='Date Filed' display='true'/>
    </group>
</groups>

我如何将其反序列化为以下对象?我不希望我的 xml 有以下标签“ArrayofGroup”,而是 xml 应该有上面提到的自定义标签。

public class GroupOfControls
{
public int instanceId { get; set; }
public int GroupId { get; set; }
public string Name { get; set; }
public List<SearchControl> Group { get; set; }
}

public class SearchControl
{
public string Name { get; set; }
public string Label { get; set; }
public bool Display { get; set; }
public string Default { get; set; }
public List<SearchOption> SearchOptions { get; set; }
}

public class SearchOption
{
public string Value { get; set; }
public string Label { get; set; }
public bool Display { get; set; }
public string SearchMode { get; set; }
public string SearchType { get; set; }
}
}
4

1 回答 1

3

如果您没有 XSD 文件,则需要从 XML 创建一个。您可以使用以下命令通过 Visual Studio 命令行执行此操作:

xsd myfilename.xml

一旦你有一个 XSD 文件,这应该很容易。

我正在使用 Visual Studio 2010 (C#/.Net 4),我会这样做:

首先,我将在 Visual Studio 中创建一个新的解决方案:

新项目

Add => Existing Item然后,您需要通过右键单击您的解决方案并选择并浏览到 XSD来将 XSD 文件导入您的项目。

在项目中拥有 XSD 后,您需要启动 Visual Studio 命令提示符,使用cd导航到项目目录,然后键入以下命令:

xsd myFilename.xsd /classes

这会生成您要将 XML 反序列化为的 C# 类。使用Add Existing Item对话框将这个新类导入您的解决方案。

接下来,您将using System.Xml.Serialization;and添加using System.IO;到您的 using 语句中。然后使用以下代码将您的 XML 反序列化为一个对象(假设 XML 针对您的 XSD 进行验证)。我可以归档的最新 XSDResponseData如下所示:

解决方案浏览器

考虑到这一点,我的 C# 代码如下:

using System;
using System.IO;
using System.Xml.Serialization;

namespace XML_Deserialization
{
    class Program
    {
        static void Main(string[] args)
        {
            ResponseData myResponseData = new ResponseData();

            XmlSerializer mySerializer = new XmlSerializer(typeof(ResponseData));
            StreamReader myStreamReader = new StreamReader(@"C:\Users\JMK\Documents\Visual Studio 2010\Projects\scratch\XML Deserialization\XML Deserialization\text.xml");
            myResponseData = (ResponseData)mySerializer.Deserialize(myStreamReader);

            Console.ReadLine();
        }
    }
}
于 2012-07-09T15:52:18.380 回答