我有这个xml
<products>
<product>
<name>Demo</name>
</product>
<product>
<name>Black Beauty III</name>
<description>Beautiful les paul guitar</description>
<company>
<name>Les Paul</name>
<description>Very Good Company for guitar</description>
<year>1967</year>
<address>
<houseno>Flat no-52</houseno>
<street>Avishkar Appt. JVLR, Jogeshwari(E)</street>
<city>Mumbai</city>
<country>India</country>
<pin>400060</pin>
</address>
</company>
<grossprice>5700</grossprice>
<netprice>6000</netprice>
<measure>1 pc</measure>
<category>4</category>
</product>
<product>
<name></name>
<description></description>
<company>
<name></name>
<description></description>
<year></year>
<address>
<houseno></houseno>
<street></street>
<city></city>
<country></country>
<pin></pin>
</address>
</company>
<grossprice></grossprice>
<netprice></netprice>
<measure></measure>
<category></category>
</product>
</products>
使用此代码我无法将其反序列化为对象
using (FileStream fs = new FileStream(System.IO.Path.Combine(System.Environment.CurrentDirectory + "/Products.xml"), FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(Products));
var products = serializer.Deserialize(fs) as Products;
}
我在类
中提到了所有XML元素和XMLroots[XmlType("products")]
[XmlInclude(typeof(Products))]
public class Products
{
public Products() { }
public Products(Boolean GetProducts)
{
if (GetProducts)
Items = GetAllProducts().Items;
}
[XmlElement("product")]
public List<Product> Items { get; set; }
public Products GetAllProducts()
{
try
{
Products allProducts = new Products();
using (FileStream fs = new FileStream(System.IO.Path.Combine(System.Environment.CurrentDirectory + "/Products.xml"), FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(Products));
var products = serializer.Deserialize(fs) as Products;
}
return allProducts;
}
catch (Exception ex) { return null; }
}
public Products GetAllProducts(ProductCategory Category)
{
return null;
}
}
[XmlType("product")]
[XmlInclude(typeof(Product))]
public class Product
{
[XmlElement("name")]
String Name { get; set; }
[XmlElement("description")]
String Description { get; set; }
[XmlElement("company")]
Company Brand { get; set; }
[XmlElement("grossprice")]
String GrossPrice { get; set; }
[XmlElement("netprice")]
String NetPrice { get; set; }
[XmlElement("measure")]
String Measure { get; set; }
[XmlElement("categoy")]
ProductCategory Category { get; set; }
}
如果你想我可以发布更多的类结构......`在这里输入代码
答案 0 :(得分:4)
我使用了它:
class Program
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream("xml.xml", FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(Products));
var products = serializer.Deserialize(fs) as Products;
}
}
}
[XmlType("products")]
[XmlInclude(typeof(Products))]
public class Products
{
[XmlElement("product")]
public List<Product> Items { get; set; }
}
[XmlType("product")]
[XmlInclude(typeof(Product))]
public class Product
{
[XmlElement("name")]
String Name { get; set; }
[XmlElement("description")]
String Description { get; set; }
[XmlElement("company")]
Company Brand { get; set; }
[XmlElement("grossprice")]
String GrossPrice { get; set; }
[XmlElement("netprice")]
String NetPrice { get; set; }
[XmlElement("measure")]
String Measure { get; set; }
[XmlElement("categoy")]
ProductCategory Category { get; set; }
}
[XmlType("company")]
[XmlInclude(typeof(Company))]
public class Company
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("description")]
public string Description { get; set; }
[XmlElement("year")]
public string Year { get; set; }
[XmlElement("address")]
public Address Address { get; set; }
public Company()
{
}
}
[XmlType("address")]
[XmlInclude(typeof(Address))]
public class Address
{
[XmlElement("houseno")]
public string HouseNumber { get; set; }
[XmlElement("street")]
public string Street { get; set; }
[XmlElement("city")]
public string City { get; set; }
[XmlElement("country")]
public string Country { get; set; }
[XmlElement("pin")]
public string Pin { get; set; }
public Address()
{
}
}
[XmlType("category")]
[XmlInclude(typeof(ProductCategory))]
public class ProductCategory
{
public ProductCategory()
{
}
}
使用正确的Xml属性将所有内容转换为标记对象时最简单。
答案 1 :(得分:2)
在您的课程中公开您的媒体资源。如果它们是私有的,受保护的或内部的,那么XmlSerializer当时看不到,因此无法设置它们。