我有以下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; }
}
}
答案 0 :(得分:2)
如果您没有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;
和using System.IO;
添加到您的using语句中。然后使用以下代码将XML反序列化为对象(假设XML针对您的XSD进行验证)。我可以提交最新的XSD,我打电话给ResponseData
,如下所示:
考虑到这一点,我的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();
}
}
}