【发布时间】:2021-03-23 07:39:00
【问题描述】:
两天后我无法反序列化 XML 文件。我尝试了很多不同的想法,但仍然没有成功。当我在 1、40 上反序列化名为 phone.xml 的 xml 文件时出现错误。我认为这可能是在带有 [XmlElement("id")] 的括号中缺少命名空间的问题,但缺口发生了变化。我复制了不同的反序列化想法。没有成功。此外,我什至无法使用任何转换器转换此 xml,但我确信它是正确的。帮助
链接内xml结构的jpeg示例
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
public class OrderedItem
{
[XmlElement("id")]
public string id;
[XmlElement("username")]
public string username;
[XmlElement("phoneType")]
public string phoneType;
[XmlElement("value")]
public string value;
}
public class Program
{
public static void Main()
{
Program t = new Program();
t.DeserializeObject("phone.xml");
}
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with TextReader");
XmlSerializer serializer =
new XmlSerializer(typeof(OrderedItem));
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate);
TextReader reader = new StreamReader(fs);
OrderedItem i;
i = (OrderedItem)serializer.Deserialize(reader);
Console.Write(
i.id + "\t" +
i.username + "\t" +
i.phoneType + "\t" +
i.value + "\t");
}
}
XML 示例
<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object>
<Property Name="id"></Property>
<Property Name="username">JLOCK0</Property>
<Property Name="phoneType">phone1</Property>
<Property Name="value">346-209-9609</Property>
</Object>
<Object>
<Property Name="id"></Property>
<Property Name="username">JLOCK0</Property>
<Property Name="phoneType">phone2</Property>
<Property Name="value">(478) 8085400</Property>
</Object>
</Objects>
【问题讨论】:
-
是的。您应该尝试将您的
OrderedItem序列化为 XML,您会看到结果与您当前的 XML 不匹配 - 实际上它们应该完全不同。请参阅:dotnetfiddle.net/7RZj5A。一方面,XML 包含对象列表,而不是单个对象。另一方面,属性名称<Property ...>与您的任何 c# 属性名称都不对应。 -
@dbc 问题是我无法序列化它。我的意思是我会得到这样的缺少东西的数据,我必须按原样使用
-
好的。这不是答案,只是评论。评论的重点是,您可以通过序列化和比较您编写的内容与您需要阅读的内容来调试de序列化问题。
-
路径“phone.xml”指向当前应用程序文件夹。检查项目输出目录中同名的文件是否正确。
标签: c# xml deserialization