C# 如何使用C从其他列表创建动态列表#
我使用C# 如何使用C从其他列表创建动态列表#,c#,xml-serialization,C#,Xml Serialization,我使用XmlSerializer和StreamReader读取一个XML文件,如下所示: CarCollection cars = null; XmlSerializer serializer = new XmlSerializer(typeof(CarCollection)); StreamReader reader = new StreamReader(path) cars = (CarCollection)serializer.Deserialize(reader); reader.Clo
XmlSerializer
和StreamReader
读取一个XML文件,如下所示:
CarCollection cars = null;
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
StreamReader reader = new StreamReader(path)
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();
我的类CarCollection
正在创建包含xml文件内容的列表
以下是我的课程:
[Serializable()]
public class Car
{
[XmlElement("StockNumber")]
public string StockNumber { get; set; }
[XmlElement("Make")]
public string Make { get; set; }
[XmlElement("Model")]
public string Model { get; set; }
}
[Serializable()]
public class Address
{
[XmlAttribute("Type")]
public string Type { get; set; }
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Street")]
public string Street { get; set; }
[XmlElement("City")]
public string City { get; set; }
[XmlElement("State")]
public string State { get; set; }
[XmlElement("Zip")]
public string Zip { get; set; }
[XmlElement("Country")]
public string Country { get; set; }
}
[Serializable()]
[XmlRoot("CarCollection")]
public class CarCollection
{
[XmlAttribute("PurchaseOrderNumber")]
public string PurchaseOrderNumber { get; set; }
[XmlAttribute("OrderDate")]
public string OrderDate { get; set; }
[XmlElement("DeliveryNotes")]
public string DeliveryNotes { get; set; }
public List<Car> Cars;
[XmlElement("Address")]
public List<Address> Address;
}
[Serializable()]
公车
{
[XmlElement(“股票编号”)]
公共字符串StockNumber{get;set;}
[XmlElement(“Make”)]
公共字符串Make{get;set;}
[XmlElement(“模型”)]
公共字符串模型{get;set;}
}
[可序列化()]
公共课堂演讲
{
[XmlAttribute(“类型”)]
公共字符串类型{get;set;}
[XmlElement(“名称”)]
公共字符串名称{get;set;}
[XmlElement(“街道”)]
公共字符串Street{get;set;}
[XmlElement(“城市”)]
公共字符串City{get;set;}
[XmlElement(“状态”)]
公共字符串状态{get;set;}
[XmlElement(“Zip”)]
公共字符串Zip{get;set;}
[XmlElement(“国家”)]
公共字符串国家{get;set;}
}
[可序列化()]
[XmlRoot(“CarCollection”)]
公营车辆收集
{
[XmlAttribute(“PurchaseOrderNumber”)]
公共字符串PurchaseOrderNumber{get;set;}
[XmlAttribute(“订单日期”)]
公共字符串OrderDate{get;set;}
[XmlElement(“交货通知”)]
公共字符串DeliveryNotes{get;set;}
公共车辆清单;
[XmlElement(“地址”)]
公开名单地址;
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<CarCollection PurchaseOrderNumber="99503" OrderDate="1999-10-20">
<Address Type="Shipping">
<Name>Ellen Adams</Name>
<Street>123 Maple Street</Street>
<City>Mill Valley</City>
<State>CA</State>
<Zip>10999</Zip>
<Country>USA</Country>
</Address>
<Address Type="Billing">
<Name>Tai Yee</Name>
<Street>8 Oak Avenue</Street>
<City>Old Town</City>
<State>PA</State>
<Zip>95819</Zip>
<Country>USA</Country>
</Address>
<DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>
<Cars >
<Car>
<StockNumber>1020</StockNumber>
<Make>Nissan</Make>
<Model>Sentra</Model>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
<Model>Corolla</Model>
</Car>
<Car>
<StockNumber>1111</StockNumber>
<Make>Honda</Make>
<Model>Accord</Model>
</Car>
</Cars>
</CarCollection>
艾伦·亚当斯
枫树街123号
米尔山谷
加利福尼亚州
10999
美国
大仪
橡树大道8号
老城
帕
95819
美国
请把包裹放在车道旁的棚里。
1020
日产
森特拉
1010
丰田
花冠
1111
本田
一致
这很好,我得到了我想要的结果,但是现在我需要把这两个列表和三个字段放在一个动态列表中,我怎么做呢?我想知道你为什么要做你描述的事情 您可以添加如下属性以获取所有内容的列表:
[XmlIgnore]
public List<object> Things
{
get
{
var ret = new List<object>();
if (PurchaseOrderNumber != null)
ret.Add(PurchaseOrderNumber);
if (OrderDate != null)
ret.Add(OrderDate);
if (DeliveryNotes != null)
ret.Add(DeliveryNotes);
if(Cars != null)
ret.AddRange(Cars);
if(Address != null)
ret.Add(Address);
return ret;
}
}
[XmlIgnore]
公开物品清单
{
得到
{
var ret=新列表();
if(PurchaseOrderNumber!=null)
ret.Add(采购订单号);
if(OrderDate!=null)
ret.Add(订单日期);
如果(DeliveryNotes!=null)
ret.Add(交货通知单);
如果(汽车!=null)
ret.AddRange(汽车);
if(地址!=null)
ret.Add(地址);
返回ret;
}
}
但是无法设置它,因为您如何知道字符串是三个字符串属性中的哪一个。您可以强制它将三个属性放在前三个位置,但这只是令人不快的代码。您可能认为您可以这样做:
[XmlAttribute("PurchaseOrderNumber", typeof(string))]
[XmlAttribute("OrderDate", typeof(string))]
[XmlElement("DeliveryNotes", typeof(string))]
List<object> Things;
[XmlElement("Car", typeof(Car))]
[XmlElement("Address", typeof(Address))]
public List<BaseClass> Things {get;set;}
[xmltattribute(“PurchaseOrderNumber”,typeof(string))]
[XmlAttribute(“OrderDate”,typeof(string))]
[XmlElement(“DeliveryNotes”,类型(字符串))]
列出事情;
但是您不能这样做,因为序列化程序也有同样的问题,它找到一个字符串,它如何知道要在xml中写入哪个元素或属性
您可以做的一件事是,如果Car和Address具有相同的基类,您可以这样做:
[XmlAttribute("PurchaseOrderNumber", typeof(string))]
[XmlAttribute("OrderDate", typeof(string))]
[XmlElement("DeliveryNotes", typeof(string))]
List<object> Things;
[XmlElement("Car", typeof(Car))]
[XmlElement("Address", typeof(Address))]
public List<BaseClass> Things {get;set;}
[XmlElement(“汽车”,类型(汽车))]
[XmlElement(“地址”,类型(地址))]
公共列表事物{get;set;}
告诉我们更多关于你正在努力实现的目标,也许有人会提供更多帮助。我想知道你为什么要做你描述的事情 您可以添加如下属性以获取所有内容的列表:
[XmlIgnore]
public List<object> Things
{
get
{
var ret = new List<object>();
if (PurchaseOrderNumber != null)
ret.Add(PurchaseOrderNumber);
if (OrderDate != null)
ret.Add(OrderDate);
if (DeliveryNotes != null)
ret.Add(DeliveryNotes);
if(Cars != null)
ret.AddRange(Cars);
if(Address != null)
ret.Add(Address);
return ret;
}
}
[XmlIgnore]
公开物品清单
{
得到
{
var ret=新列表();
if(PurchaseOrderNumber!=null)
ret.Add(采购订单号);
if(OrderDate!=null)
ret.Add(订单日期);
如果(DeliveryNotes!=null)
ret.Add(交货通知单);
如果(汽车!=null)
ret.AddRange(汽车);
if(地址!=null)
ret.Add(地址);
返回ret;
}
}
但是无法设置它,因为您如何知道字符串是三个字符串属性中的哪一个。您可以强制它将三个属性放在前三个位置,但这只是令人不快的代码。您可能认为您可以这样做:
[XmlAttribute("PurchaseOrderNumber", typeof(string))]
[XmlAttribute("OrderDate", typeof(string))]
[XmlElement("DeliveryNotes", typeof(string))]
List<object> Things;
[XmlElement("Car", typeof(Car))]
[XmlElement("Address", typeof(Address))]
public List<BaseClass> Things {get;set;}
[xmltattribute(“PurchaseOrderNumber”,typeof(string))]
[XmlAttribute(“OrderDate”,typeof(string))]
[XmlElement(“DeliveryNotes”,类型(字符串))]
列出事情;
但是您不能这样做,因为序列化程序也有同样的问题,它找到一个字符串,它如何知道要在xml中写入哪个元素或属性
您可以做的一件事是,如果Car和Address具有相同的基类,您可以这样做:
[XmlAttribute("PurchaseOrderNumber", typeof(string))]
[XmlAttribute("OrderDate", typeof(string))]
[XmlElement("DeliveryNotes", typeof(string))]
List<object> Things;
[XmlElement("Car", typeof(Car))]
[XmlElement("Address", typeof(Address))]
public List<BaseClass> Things {get;set;}
[XmlElement(“汽车”,类型(汽车))]
[XmlElement(“地址”,类型(地址))]
公共列表事物{get;set;}
告诉我们更多关于你正在努力实现的目标,也许有人会提供更多帮助。我想知道你为什么要这么做……我想知道你为什么要这么做。。。