2 回答
TA贡献1831条经验 获得超10个赞
这里有两种不同的解决方案。
public ProductData TestFunction()
{
ProductData result = new ProductData();
string apiResponse = "API=3CProductData&XML=%3CProductData+Name%3D%22NameTest%22%3E%0D%0A++%3CId%3EXXXXXXXXX%3C%2FId%3E%0D%0A%3C%2FProductData%3E";
string xml = HttpUtility.UrlDecode(apiResponse.Substring(apiResponse.IndexOf("XML=") + 4));
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
XmlNode newNode = document.DocumentElement;
// Name is actually an attribute on the ProductData
result.Name = ((XmlAttribute)newNode.Attributes["Name"]).InnerText;
// Id is an actual node
result.ID = ((XmlNode)newNode.FirstChild).InnerText;
using (TextReader reader = new StringReader(xml))
{
var serializer = new XmlSerializer(typeof(ProductData));
result = (ProductData)serializer.Deserialize(reader);
}
return result;
}
[Serializable]
[XmlRoot("ProductData")]
public class ProductData
{
[XmlElement("Id")]
public string ID { get; set; }
[XmlAttribute("Name")]
public string Name { get; set; }
}
这段代码有一个非常脆弱的部分,我没有花很多时间尝试处理它。在我看来,XML 的格式并不是很好,因此您必须在 后面添加子字符串,XML=这就是我在末尾添加 +4 的原因。可能是一种更顺利的方法,但问题仍然在于转换 XML。由于 XML 非常简单,您只需通过 SelectSingleNode 定位值即可。如果您想采用 StreamReader 路线,则需要确保您的类/属性已设置属性(即 [XmlRoot("Productdata")])
TA贡献1854条经验 获得超8个赞
API=3CProductData&XML=您必须删除字符串中的部分,然后解码您的部分 XML
看看这段代码的工作原理:
string strRegex = @"<ProductData Name=""NameTest"">\r\n <Id>XXXXXXXXX</Id>\r\n</ProductData>";
ProductData result = null;
using (TextReader reader = new StringReader(strRegex))
{
var serializer = new XmlSerializer(typeof(ProductData));
result = (ProductData)serializer.Deserialize(reader);
}
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报