我的课程结构如下
public class Common
{
public int price { get; set; }
public string color { get; set; }
}
public class SampleProduct:Common
{
public string sample1 { get; set; }
public string sample2 { get; set; }
public string sample3 { get; set; }
}
我有XML文件如下
<ConfigData>
<Common>
<price>1234</price>
<color>pink</color>
</Common>
<SampleProduct>
<sample1>new</sample1>
<sample2>new</sample2>
<sample3>new123</sample3>
</SampleProduct>
</ConfigData>
现在我想将完整的XML数据反序列化为SampleProduct对象(单个对象)。我可以将XML数据反序列化为不同的对象,但不能反序列化为单个对象。请帮忙。
答案 0 :(得分:0)
如果您自己创建XML,请执行以下操作:
<ConfigData>
<SampleProduct>
<price>1234</price>
<color>pink</color>
<sample1>new</sample1>
<sample2>new</sample2>
<sample3>new123</sample3>
</SampleProduct>
</ConfigData>
否则,如果您从其他来源获取XML,请执行Kayani在其评论中建议的内容:
public class ConfigData
{
public Common { get; set; }
public SampleProduct { get; set; }
}
但请不要忘记以这种方式创建的SampleProduct没有&#34;价格&#34;和&#34;颜色&#34;应使用创建的Common实例
设置属性和这些属性答案 1 :(得分:0)
以下是使用您提供的XML的完整解决方案。
public static void Main(string[] args)
{
DeserializeXml(@"C:\sample.xml");
}
public static void DeserializeXml(string xmlPath)
{
try
{
var xmlSerializer = new XmlSerializer(typeof(ConfigData));
using (var xmlFile = new FileStream(xmlPath, FileMode.Open))
{
var configDataOSinglebject = (ConfigData)xmlSerializer.Deserialize(xmlFile);
xmlFile.Close();
}
}
catch (Exception e)
{
throw new ArgumentException("Something went wrong while interpreting the xml file: " + e.Message);
}
}
[XmlRoot("ConfigData")]
public class ConfigData
{
[XmlElement("Common")]
public Common Common { get; set; }
[XmlElement("SampleProduct")]
public SampleProduct XSampleProduct { get; set; }
}
public class Common
{
[XmlElement("price")]
public string Price { get; set; }
[XmlElement("color")]
public string Color { get; set; }
}
public class SampleProduct
{
[XmlElement("sample1")]
public string Sample1 { get; set; }
[XmlElement("sample2")]
public string Sample2 { get; set; }
[XmlElement("sample3")]
public string Sample3 { get; set; }
}
这将为您提供一个包含您需要的所有元素的对象。