c# - 转换xml字符串不同的对象
问题描述
有3个这样的课程
public class Product
{
public string ProudctId { get; set; }
public string ProductName { get; set; }
}
public class Owner
{
public string OwnerId { get; set; }
public string OwnerName { get; set; }
}
public class Master
{
public string MasterId { get; set; }
public string MasterName { get; set; }
}
我已经设法将这些对象转换为 XML 字符串。现在,我想从 XML 中获取原始对象。XML 如下所示:
<ProjectDetails>
<Product>
<ProductId>1</ProductId>
<ProductName>Product 1</ProductName>
</Product>
<Owner>
<OwnerId>1</OwnerId>
<OwnerName>Owner 1</OwnerName>
</Owner>
<Master>
<MasterId>1</MasterId>
<MasterName>Master 1</MasterName>
</Master>
</ProjectDetails>
问题是,如何将上面的 xml 转换成 3 个对象?某些对象的数据可能在 XML 中不可用。例如,主节点可能在 XML 中可用,也可能不可用。根节点名称是固定的(ProjectDetails)。
非常感谢任何帮助。
解决方案
var yourXML = @"<ProjectDetails>
<Product>
<ProductId>1</ProductId>
<ProductName>Product 1</ProductName>
</Product>
<Owner>
<OwnerId>1</OwnerId>
<OwnerName>Owner 1</OwnerName>
</Owner>
<Master>
<MasterId>1</MasterId>
<MasterName>Master 1</MasterName>
</Master>
</ProjectDetails>"
XmlSerializer serializer = new XmlSerializer(typeof(ProjectDetails));
using (TextReader reader = new StringReader(yourXML)) {
ProjectDetails result = (ProjectDetails) serializer.Deserialize(reader);
}
或者,如果您希望单独反序列化Product
, Owner
,请Master
替换ProjectDetails
为您要反序列化的类型。或者创建一个通用辅助函数来反序列化任何类型。(见https://stackoverflow.com/a/3187539/6419909)
这称为反序列化对象,在您的情况下称为 XML 反序列化。请参阅如何将 xml 反序列化为对象以进行进一步讨论。
推荐阅读
- clickatell - Clickatell - Whatsapp 集成
- angular - 将纯文本从 Web 服务返回到 Angular Typescript
- java - 如何动态调整 List 类型变量的输入?
- javascript - 使用 javascript 和 ajax 读取 json 对象由于 CORS 策略而出现错误
- reactjs - React Native 应用程序使用 EXPO 从 API 下载文件,并获取每个文件的链接
- sqlite - 在 Delphi/FireDAC 中加载 SQLite 扩展
- php - 为什么这个 php 脚本总是返回“True” html/php
- webots - 如何通过代码设置传感器噪声/分辨率?
- arrays - Swift For Tensorflow 中的极坐标图和饼图
- firebase - 将请求转发到 Cloud Functions 时,Firebase 托管自定义域 404