- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将xml字符串反序列化为如下定义的类型类的对象
[Serializable]
[XmlRoot("rt")]
public class XMLSessionParameters
{
[XmlArrayItem("el")]
public List<Elements> Elements { get; set; }
}
public class Elements
{
[XmlAttribute("nm")]
public string Name { get; set; }
[XmlAttribute("vl")]
public string Value { get; set; }
}
下面是我要反序列化的XML
<rt>
<el nm="Name" vl="ABCD_test"/>
<el nm="Dual" vl="AA"/>
<el nm="Quad" vl="ABCD"/>
<el nm="YYMMDD" vl="120614"/>
</rt>
下面是我用于反序列化 XML 字符串的方法
public static XMLSessionParameters DeserializeSessionParameters(string xmlString)
{
XMLSessionParameters parameters = (XMLSessionParameters)Deserialize(typeof(XMLSessionParameters), xmlString);
XElement root = XElement.Parse(xmlString);
List<XElement> fileElements = root.Elements().ToList();
foreach (XElement fileEle in fileElements)
{
string xml = fileEle.ToString();
Elements ele = (Elements)Deserialize(typeof(Elements), xml);
parameters.Elements.Add(ele);
}
return parameters;
}
private static object Deserialize(Type type, string XmlString)
{
XmlSerializer serializer = new XmlSerializer(type);
StringReader stringReader = new StringReader(XmlString);
XmlReader xmlReader = new XmlTextReader(stringReader);
object serializedObj = serializer.Deserialize(xmlReader);
return serializedObj;
}
当我将上述 XML 作为字符串传递并调用 Deserialize 函数时,XMLReader 对象拥有 None 值,我的程序突然结束,没有给出任何异常。这种行为的原因可能是什么?
最佳答案
xml不匹配类;你需要:
[XmlElement("el")]
public List<Elements> Elements { get; set; }
您对 [XmlArrayItem]
的使用(带有隐式 [XmlArray]
)适用于 xml:
<rt>
<Elements>
<el nm="Name" vl="ABCD_test"/>
<el nm="Dual" vl="AA"/>
<el nm="Quad" vl="ABCD"/>
<el nm="YYMMDD" vl="120614"/>
</Elements>
</rt>
(注意额外的 Elements
包装元素)。如果您改为使用 [XmlElement]
,则会将其删除。另外:删除 [Serializable]
:XmlSerializer 不需要那个。
检查您的属性是否正确的简单方法:设置一些典型的对象并序列化它们 - 将您获得的内容与您需要的 xml 进行比较。
完整示例:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
static class Program
{
static void Main()
{
string xmlString = @"<rt>
<el nm=""Name"" vl=""ABCD_test""/>
<el nm=""Dual"" vl=""AA""/>
<el nm=""Quad"" vl=""ABCD""/>
<el nm=""YYMMDD"" vl=""120614""/>
</rt>";
XMLSessionParameters parameters = (XMLSessionParameters)Deserialize(typeof(XMLSessionParameters), xmlString);
// parameters now has 4 elements, all correctly configured
}
private static object Deserialize(Type type, string XmlString)
{
XmlSerializer serializer = new XmlSerializer(type);
StringReader stringReader = new StringReader(XmlString);
XmlReader xmlReader = new XmlTextReader(stringReader);
object serializedObj = serializer.Deserialize(xmlReader);
return serializedObj;
}
}
[XmlRoot("rt")]
public class XMLSessionParameters
{
[XmlElement("el")]
public List<Elements> Elements { get; set; }
}
public class Elements
{
[XmlAttribute("nm")]
public string Name { get; set; }
[XmlAttribute("vl")]
public string Value { get; set; }
}
关于c# - 为什么 XMLTextReader 在将 StringReader 对象传递给它时不返回任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027853/
我想使用忽略命名空间且不检查字符的 XmlTextReader。要忽略命名空间,我可以设置属性 Namespaces=false 并且不检查字符我可以使用 XmlReaderSettings.Chec
这可能是一件非常简单的事情,但我一直没能找到它,我可能只是在寻找错误的东西...... XmlTextReader --> 它是否锁定您正在阅读的文件?我正在使用 reader.Read(),仅此而已
static void ReadXml() { string a= null; double b= 0; double c= 0; XmlReader xmlReade
这是我的要求我需要反序列化一个对象,然后我需要做一些 xml 解析(我知道这听起来如何) 所以这是我的代码 XmlTextReader myFileReader = new XmlTextReader
根据list of available namespaces in a PCL project ,包含 System.Xml。但是,在引用 System.Xml 命名空间内的 XmlTextReade
XMLTextReader 使用什么解析方法?我很迷惑。萨克斯还是 Dom? 最佳答案 都不是,真的 - 这是一个 pull parser .它既不在内存中构建完整的对象模型 (DOM),也不解析整个
我是一名初级程序员,从 C# 和 Web 服务开始。 在我的网络服务的 Service.cs 文件中,我创建了一个 ReadXMLFile() 方法,我试图在其中读取现有的 XML 文件,从中获取数据
我尝试解析此 xml,但 C# 不断抛出异常,提示它包含无效字符。无法直接从messagebox中复制文字,所以我屏蔽了。 http://img29.imageshack.us/img29/694/x
我目前必须修复现有应用程序以使用 DOM interface 以外的东西的 libxml2因为事实证明它传递的 XML 文件太大以至于无法加载到内存中。 我已经将数据加载从遍历 DOM 树重写为使用
我尝试获取节点的值,但它总是返回一个空字符串。据我所知,我必须先访问节点才能阅读它,但我还没有找到一个示例/语法来完成它。我的 XMLNode 名称是“BuyNowPrice”,并且多次出现在我的 X
在保存不包含任何数据的数据表时,我在使用 C# 中的 XmlSerializer 和 XmlTextReader 时遇到了一些问题。这是一个已知问题吗?是否有解决方法?当使用 XMLSerialize
给定一个 XDocument,我如何才能获得一个 XmlTextReader 来读取它的内容? XDocument.CreateReader() 返回一个 XmlNodeReader,我需要一个 Xm
我的代码是这样的: case "Creator": br.Read(); br.MoveToContent(); // gives the content of the role
我需要在 XmlTextReader 上设置 MaxCharactersFromEntities,这是我目前的代码: xmlDocument = new XmlDocument(); xmlTextR
我试图在不扩展实体的情况下读取 XML 文档,对其进行一些操作,然后像最初一样使用未扩展的实体重新保存它。 当直接使用 XDocument 时,它加载失败,抛出异常告诉我它有未展开的实体: XDocu
我可以在 .NET 中解析 XML。现在我至少可以在 XmlTextReader 和 XDocument 之间做出选择。这两者(或框架中包含的任何其他 XML 解析器)之间是否有任何比较? 也许这可以
如何将 XmlReader 转换为 XmlTextReader? 代码片段: XmlTextReader reader = XmlTextReader.Create(pomfile.FullName)
使用 XmlTextReader.Read(),如何确定阅读器读取的内容是否为结束/结束标记? 请注意,我不是在寻找 XmlTextReader.IsEmptyElement 的用法.我正在寻找验证是
我的问题很简单,我有一个字节数组(通过套接字填充),我想将它转换成一个 XmlTextReader 对象。我该怎么做? 这行不通: byte[] buffer = new byte[5000]; //
当以 XML 格式流式传输到 XmlReader 时,出现内存不足异常!查看内存分析器,我们可以看到它一遍又一遍地调用 StringBuilder.Append,导致大量 128KB 缓冲区填满所有内
我是一名优秀的程序员,十分优秀!