C# 将XML节点映射到对象';它的特性很容易改变
从Ruby世界回到XML到散列映射的简易性,我期待着在C#中看到类似的东西 以下是源XML:C# 将XML节点映射到对象';它的特性很容易改变,c#,xml,xpath,mapping,C#,Xml,Xpath,Mapping,从Ruby世界回到XML到散列映射的简易性,我期待着在C#中看到类似的东西 以下是源XML: 我想将其重新映射到具有以下结构的对象: { 服务:{ 姓名:“…” }, 参数:{ 查询字符串:[“…”,“…”] }, Inetnum:{ 链接:{ 类型:“…”, Href:“…” }, 资料来源:{ id:“…” }, PrimaryKey:{ Inetnum:“…” }, 属性:{ Inetnum:“…”, 网络名称:“…”, 描述:“…”, 国家:“……”, 管理员:{ 值:“…”, Re
我想将其重新映射到具有以下结构的对象:
{
服务:{
姓名:“…”
},
参数:{
查询字符串:[“…”,“…”]
},
Inetnum:{
链接:{
类型:“…”,
Href:“…”
},
资料来源:{
id:“…”
},
PrimaryKey:{
Inetnum:“…”
},
属性:{
Inetnum:“…”,
网络名称:“…”,
描述:“…”,
国家:“……”,
管理员:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
},
TechC:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
},
地位:“……”,
MntBy:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
}
备注:“…”,#所有备注节点的串联
资料来源:{
值:“…”,
评论:“……”
}
},
标签:[
{id:“…”}
]
},
人{
链接:{
类型:“…”,
Href:“…”
},
资料来源:{
id:“…”
}
PrimaryKey:{
NicHdl:“…”
},
属性:{
人:“…”,
地址:“…”,#所有地址节点的串联
电话:“…”,
传真号码:“…”,
NicHdl:“…”,
MntBy:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
}
备注:“…”,#所有备注节点的串联
资料来源:{
值:“…”,
评论:“……”
}
}
},
路线:{
链接:{
类型:“…”,
Href:“…”
},
资料来源:{
id:“…”
},
PrimaryKey:{
路线:“…”,
来源:“…”
},
属性:{
路线:“…”,
描述:“…”,
来源:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
},
备注:“…”,#所有备注节点的串联
MntBy:{
值:“…”,
ReferencedType:“…”,
链接:{
类型:“…”,
Href:“…”
}
},
资料来源:{
值:“…”,
评论:“……”
}
}
},
条款和条件:{
类型:“…”,
Href:“…”
}
}
要能够调用以下属性:
whois.Inetnum.Attr.Netname
我完全不喜欢通过调用SelectSingleNode(“xpath”)来检索每个节点代码>
所需的过程是:
定义接收器对象及其所有子对象
定义映射规则
使用单个方法调用解析XML字符串
这里有一个方法
您需要首先添加相关的参考资料(这里有一些):
使用System.Linq代码>
使用System.Xml.Linq代码>
使用System.Text代码>
使用System.Xml代码>
使用System.Xml.Serialization代码>
创建将保存反序列化数据的包装器类
[XmlRoot("root")]
public class root
{
[XmlElement("MyObject")]
public List<MyObject> A_Object
{
get;
set;
}
}
}
*注意:如果您有要跟踪但未被反序列化的属性,则可以有没有[XmlElement]的属性
最后,将XML反序列化到对象列表中:
public List反序列化xml(字符串xmlPath)
{
XmlSerializer反序列化器=新的XmlSerializer(typeof(root));
List objectList=新列表();
尝试
{
使用(文本)
[XmlElement("type")] //from your sample code route,person all go here
public string objType
{
get;
set;
}
[XmlElement("address")]
public string personAddr
{
get;
set;
}
[XmlElement("phone")]
public string personPhone
{
get;
set;
}