我想将XML反序列化为列表和简单字符串:
<GeneralTranslation>
<Day>Day</Day>
<Month>Month</Month>
<Year>Year</Year>
<Submit>Submit</Submit>
<Select>Please select</Select>
<TradingExp>
<Option>Less than a year</Option>
<Option>1-2 years</Option>
<Option>3-5 years</Option>
<Option>Above 5 years</Option>
</TradingExp>
<LevelOfInvestment>
<Option>Less than 5K</Option>
<Option>Between 5K and 15K</Option>
<Option>Between 15K and 50K</Option>
<Option>Above 50KK</Option>
</LevelOfInvestment>
</GeneralTranslation>
进入这个:(无论如何都要将其放入列表而不手动完成?)
[XmlRoot("GeneralTranslation")]
public class GeneralTrnaslation
{
public string Day { get; set; }
public string Month { get; set; }
public string Year { get; set; }
public string Above { get; set; }
public string Select { get; set; }
public string Submit { get; set; }
public List<string> LevelOfInvestment { get; set; }
public List<string> TradingExp { get; set; }
}
这就是我提出的,除列表外的所有作品:
(GeneralTrnaslation)serializer.Deserialize(streamTrans)
答案 0 :(得分:1)
我试图从你的xml中生成一个类。 一开始我从你的xml
生成了一个xsd<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="GeneralTranslation">
<xs:complexType>
<xs:sequence>
<xs:element name="Day" type="xs:string" />
<xs:element name="Month" type="xs:string" />
<xs:element name="Year" type="xs:string" />
<xs:element name="Submit" type="xs:string" />
<xs:element name="Select" type="xs:string" />
<xs:element name="TradingExp">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Option" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="LevelOfInvestment">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Option" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然后使用xsd实用程序我生成了以下类
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class GeneralTranslation {
private string dayField;
private string monthField;
private string yearField;
private string submitField;
private string selectField;
private string[] tradingExpField;
private string[] levelOfInvestmentField;
/// <remarks/>
public string Day {
get {
return this.dayField;
}
set {
this.dayField = value;
}
}
/// <remarks/>
public string Month {
get {
return this.monthField;
}
set {
this.monthField = value;
}
}
/// <remarks/>
public string Year {
get {
return this.yearField;
}
set {
this.yearField = value;
}
}
/// <remarks/>
public string Submit {
get {
return this.submitField;
}
set {
this.submitField = value;
}
}
/// <remarks/>
public string Select {
get {
return this.selectField;
}
set {
this.selectField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable=false)]
public string[] TradingExp {
get {
return this.tradingExpField;
}
set {
this.tradingExpField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable=false)]
public string[] LevelOfInvestment {
get {
return this.levelOfInvestmentField;
}
set {
this.levelOfInvestmentField = value;
}
}
}
}
所以在这里你可以获得字符串数组,但不能列出
下面是方法:在某些情况下,我正在使用xsd进行以下技巧:
当我知道我的文档schmema可以在开发周期中更改时:
我正在将XSD文件添加到我的项目中。 在项目文件中,我将添加以下部分
<PropertyGroup>
<WIN_SDK_PATH>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows@CurrentInstallFolder)</WIN_SDK_PATH>
<WIN_SDK_BIN_PATH>$(WIN_SDK_PATH)bin</WIN_SDK_BIN_PATH>
<XSDUTIL>"$(WIN_SDK_BIN_PATH)\xsd.exe"</XSDUTIL>
</PropertyGroup>
<Target Name="XSD2CS">
<Exec Command="$(XSDUTIL) "$(ProjectDir)XMLSchema1.xsd" /classes /out:"$(ProjectDir)obj" /namespace:$(RootNamespace).XSD" />
</Target>
<Target Name="BeforeBuild" DependsOnTargets="XSD2CS">
</Target>
还有一个包含我的项目文件的部分
<Compile Include="$(ProjectDir)obj\XMLSchema1.cs">
<SubType>Code</SubType>
</Compile>
每次我编译项目时,我都会得到一个与我的xsd的最新实际版本相对应的类。所以我需要处理的是一个正确且完整的xsd文件。
答案 1 :(得分:1)
假设您正在尝试一种标准的反序列化方法,问题是XML没有标准的字符串列表,而是一个“选项”列表。
如果它使用标准的.NET字符串列表,结果将如下所示:
<LevelOfInvestment>
<string>test1</string>
<string>test2</string>
</LevelOfInvestment>