gpt4 book ai didi

c# - 为什么 XMLTextReader 在将 StringReader 对象传递给它时不返回任何内容?

转载 作者:行者123 更新时间:2023-11-30 21:06:39 25 4
gpt4 key购买 nike

我想将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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com