Mic*_*itt 0 c# xml serialization
我正在尝试找到一种方法来获取XmlNodeList并将其反序列化。
我将需要将XmlNodeList obj转换为序列化程序可以使用的对象,以进行反序列化。
有什么建议吗?
string fileLoc = @"File.xml";
XmlDocument xdoc = new XmlDocument();
xdoc.Load(fileLoc);
XmlNodeList ndlist = xdoc.SelectNodes("//DConfig/ConfigValue/UrlListValues/UrlInfo");
UrlListValues myObject;
XmlSerializer mySerializer = new XmlSerializer(typeof(UrlListValues));
FileStream myFileStream = new FileStream(fileLoc, FileMode.Open);
// *** This is where the problem starts. Cannot cast as UrlListValues
myObject = (UrlListValues)mySerializer.Deserialize(myFileStream);
foreach (UrlInfo xn in myObject)
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
您必须选择父节点并将其反序列化。对您来说,可能是这样的:
XmlNode node= xdoc.SelectSingleNode("//DConfig/ConfigValue/UrlListValues");
XmlSerializer ser = new XmlSerializer(typeof(UrlListValues));
var deser = (UrlListValues)ser.Deserialize(new StringReader(node.OuterXml));
Run Code Online (Sandbox Code Playgroud)
也可以使用XDocument来完成,例如:
string fileLoc = @"File.xml";
XDocument xdoc = XDocument.Load(fileLoc);
XmlSerializer mySerializer = new XmlSerializer(typeof(UrlListValues));
XElement urlListValuesEl = xdoc.Root.Descendants("UrlListValues").First();
myObject = (UrlListValues)mySerializer.Deserialize(urlListValuesEl.CreateReader());
Run Code Online (Sandbox Code Playgroud)
(编辑)另一种想法-您可以XmlReader直接使用以下代码轻松完成此操作:
myObject myobj = null;
using(XmlReader reader = XmlReader.Create(fileLoc))
{
if (reader.ReadToFollowing("UrlListValues")
{
XmlSerializer ser = new XmlSerializer(typeof(UrlListValues));
myobj = (UrlListValues)ser.Deserialize(reader.ReadSubTree());
}
else
{
throw Exception("Failed to find node");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4381 次 |
| 最近记录: |