XML相关
读取Xml文件
这里的xml地址可能有问题,不太懂,我用的绝对地址。这里的xml里有&符号会报错(“An error occurred while parsing EntityName”)。
XmlDocument xmldoc = new XmlDocument(); FileStream fs = new FileStream(@"..\XMLFile2.xml", FileMode.Open, FileAccess.Read); xmldoc.Load(fs); return xmldoc;
Xml反序列化成对象
要反序列化的xml,这里要得到Recommendations
<GetCategorySpecificsResponse xmlns="urn:ebay:apis:eBLBaseComponents"> <Timestamp>2011-06-27T07:56:30.174Z</Timestamp> <Ack>Success</Ack> <Version>725</Version> <Build>E725_CORE_BUNDLED_13381130_R1</Build> <Recommendations> <CategoryID>53159</CategoryID> <NameRecommendation> <Name>Style</Name> <ValidationRules> <MinValues>1</MinValues> <MaxValues>1</MaxValues> <SelectionMode>SelectionOnly</SelectionMode> <VariationSpecifics>Disabled</VariationSpecifics> </ValidationRules> <ValueRecommendation> <Value>Blouse</Value> </ValueRecommendation> <ValueRecommendation> <Value>Button Down Shirt</Value> </ValueRecommendation> <ValueRecommendation> <Value>Halter</Value> </ValueRecommendation> <ValueRecommendation> <Value>Knit Top</Value> </ValueRecommendation> <ValueRecommendation> <Value>Polo Shirt</Value> </ValueRecommendation> </NameRecommendation> <NameRecommendation> <Name>Sleeve Style</Name> <ValidationRules> <MaxValues>1</MaxValues> <SelectionMode>FreeText</SelectionMode> </ValidationRules> <ValueRecommendation> <Value>3/4 Sleeve</Value> </ValueRecommendation> <ValueRecommendation> <Value>Cap Sleeve</Value> </ValueRecommendation> <ValueRecommendation> <Value>Sleeveless</Value> </ValueRecommendation> <ValueRecommendation> <Value>Spaghetti Strap</Value> </ValueRecommendation> <ValueRecommendation> <Value>Strapless</Value> </ValueRecommendation> </NameRecommendation> </Recommendations> </GetCategorySpecificsResponse>
构建Recommendations对象
[XmlRoot(Namespace = "urn:ebay:apis:eBLBaseComponents")] public class Recommendations { public int CategoryID { get; set; } [XmlElement] public List<NameRecommendation> NameRecommendation { get; set; } }
public class NameRecommendation { public string Name { get; set; } public ValidationRules ValidationRules { get; set; } [XmlElement] public List<ValueRecommendation> ValueRecommendation { get; set; } }
public class ValidationRules { public string ValueType { get; set; } public int MinValues { get; set; } public int MaxValues { get; set; } public string SelectionMode { get; set; } public string VariationSpecifics { get; set; } }
public class ValueRecommendation { [XmlElement] public string Value { get; set; } public ValidationRules ValidationRules { get; set; } }
反序列化代码
public static T Deserialize<T>(XmlDocument response, string NodeName) { XmlNodeList NameRecommendationList = response.GetElementsByTagName(NodeName); string xml = NameRecommendationList[0].OuterXml; XmlSerializer serializer = new XmlSerializer(typeof(T)); #region 将XML 转换成流 byte[] byteData = null; byteData = Encoding.ASCII.GetBytes(xml); Stream stream = new MemoryStream(byteData); #endregion //将流转化为想要的对象 T test = (T)serializer.Deserialize(stream); return test; }