标签: xml-deserialization

如何反序列化XML文档

如何反序列化此XML文档:

<?xml version="1.0" encoding="utf-8"?>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <Car>
    <StockNumber>1111</StockNumber>
    <Make>Honda</Make>
    <Model>Accord</Model>
  </Car>
</Cars>
Run Code Online (Sandbox Code Playgroud)

我有这个:

[Serializable()]
public class Car
{
    [System.Xml.Serialization.XmlElementAttribute("StockNumber")]
    public string StockNumber{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Make")]
    public string Make{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Model")]
    public string Model{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.

[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlArrayItem(typeof(Car))]
    public Car[] Car { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

.

public class CarSerializer
{
    public Cars Deserialize()
    {
        Cars[] …
Run Code Online (Sandbox Code Playgroud)

c# xml asp.net serialization xml-deserialization

453
推荐指数
12
解决办法
64万
查看次数

是否可以将XML反序列化为List <T>?

给出以下XML:

<?xml version="1.0"?>
<user_list>
   <user>
      <id>1</id>
      <name>Joe</name>
   </user>
   <user>
      <id>2</id>
      <name>John</name>
   </user>
</user_list>
Run Code Online (Sandbox Code Playgroud)

以下课程:

public class User {
   [XmlElement("id")]
   public Int32 Id { get; set; }

   [XmlElement("name")]
   public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用XmlSerializer将xml反序列化为List<User>?如果是这样,我需要使用哪种类型的附加属性,或者我需要使用哪些其他参数来构造XmlSerializer实例?

User[]如果有点不太可取的话,array()是可以接受的.

c# serialization xml-serialization xml-deserialization

147
推荐指数
6
解决办法
13万
查看次数

如何在Python中将xml字符串转换为字典?

我有一个程序从套接字读取xml文档.我将xml文档存储在一个字符串中,我希望将其直接转换为Python字典,就像在Django的simplejson库中完成一样.

举个例子:

str ="<?xml version="1.0" ?><person><name>john</name><age>20</age></person"
dic_xml = convert_to_dic(str)
Run Code Online (Sandbox Code Playgroud)

然后dic_xml看起来像{'person' : { 'name' : 'john', 'age' : 20 } }

python xml json dictionary xml-deserialization

112
推荐指数
8
解决办法
16万
查看次数

如何将xml反序列化为对象

<StepList>
  <Step>
    <Name>Name1</Name>
    <Desc>Desc1</Desc>
  </Step>
  <Step>
    <Name>Name2</Name>
    <Desc>Desc2</Desc>
  </Step>
</StepList>
Run Code Online (Sandbox Code Playgroud)

我有这个XML,我应该如何建模类,以便我可以使用XmlSerializer对象反序列化它?

c# xml-deserialization

106
推荐指数
2
解决办法
20万
查看次数

在Serializable C#类上使用XmlArrayItem属性而不使用XmlArray

我想要XML格式如下:

<configuration><!-- Only one configuration node -->
  <logging>...</logging><!-- Only one logging node -->
  <credentials>...</credentials><!-- One or more credentials nodes -->
  <credentials>...</credentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个Configuration具有该[Serializable]属性的类.要序列化凭据节点,我有以下内容:

[XmlArray("configuration")]
[XmlArrayItem("credentials", typeof(CredentialsSection))]
public List<CredentialsSection> Credentials { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,当我将其序列化为XML时,XML的格式如下:

<configuration>
  <logging>...</logging>
  <configuration><!-- Don't want credentials nodes nested in a second
                      configuration node -->
    <credentials>...</credentials>
    <credentials>...</credentials>
  </configuration>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果我删除该[XmlArray("configuration")]行,我会得到以下内容:

<configuration>
  <logging>...</logging>
  <Credentials><!-- Don't want credentials nodes nested in Credentials node -->
    <credentials>...</credentials>
    <credentials>...</credentials>
  </Credentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如何<credentials>在单根节点中使用多个节点以我想要的方式对其进行序列化<configuration>?我想这样做而不必实现 …

c# xml xml-serialization serializable xml-deserialization

48
推荐指数
1
解决办法
4万
查看次数

无法生成临时类(result = 1).错误CS0030:无法将类型'Type []'转换为'Type'?

我使用xsd.exe工具从我的xsd文件创建一个类后出现此错误.所以我在网上搜索并找到了解决方案.这是链接:http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

问题是这会使代码运行,但不知何故反序列化数据似乎已损坏.我做了网站建议的内容,最后第二个数组维度总是空的(参见网站的评论,有人也有这个问题).问题是,我现在该如何解决这个问题?是否有另一种工具来创建xsd文件?我尝试过Xsd2Code,没有成功.

谢谢 :-)

c# xsd xml-deserialization

48
推荐指数
4
解决办法
4万
查看次数

如何在反序列化文档时忽略未使用的XML元素?

我正在使用SimpleXml来(de)序列化POJO.现在,我有一个大的XML,它有一些不需要的元素.例如,使用此XML:

<Root>
   <Element>Used</Element>
   <Another>Not used</Another>
<Root> 
Run Code Online (Sandbox Code Playgroud)

我想创建一个POJO,它看起来像:

@Root
class Root{
    @Element
    private String element;
}
Run Code Online (Sandbox Code Playgroud)

问题是我得到了这个例外:

simpleframework.xml.core.ElementException: Element 'Another' does not have a
match in class blah.blah.Blah at line 1
Run Code Online (Sandbox Code Playgroud)

那么......我应该如何配置POJO以便我能正确解析XML?

java xml-deserialization simple-framework

36
推荐指数
2
解决办法
1万
查看次数

从String反序列化XML

我正在尝试将我从Web服务获得的结果转换为字符串并将其转换为对象.

这是我从我的服务中得到的字符串:

<StatusDocumentItem><DataUrl/><LastUpdated>2013-01-31T15:28:13.2847259Z</LastUpdated><Message>The processing of this task has started</Message><State>1</State><StateName>Started</StateName></StatusDocumentItem>
Run Code Online (Sandbox Code Playgroud)

所以我有一个课程为:

[XmlRoot]
public class StatusDocumentItem
{
    [XmlElement]
    public string DataUrl;
    [XmlElement]
    public string LastUpdated;
    [XmlElement]
    public string Message;
    [XmlElement]
    public int State;
    [XmlElement]
    public string StateName;
}
Run Code Online (Sandbox Code Playgroud)

这就是我试图通过XMLDeserializer将该字符串作为StatusDocumentItem类型的对象(NB.operationXML包含字符串):

string operationXML = webRequest.getJSON(args[1], args[2], pollURL);
var serializer = new XmlSerializer(typeof(StatusDocumentItem));
StatusDocumentItem result;

using (TextReader reader = new StringReader(operationXML))
{
    result = (StatusDocumentItem)serializer.Deserialize(reader);
}

Console.WriteLine(result.Message);
Run Code Online (Sandbox Code Playgroud)

但我的结果对象总是空的.我究竟做错了什么?

更新.我从我的operationXML获得的值是这样的,并且有一个不必要的xmlns属性阻止了我的反序列化.没有这个属性,一切都很好.这是它的样子:

"<StatusDocumentItem xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DataUrl/><LastUpdated>2013-02-01T12:35:29.9517061Z</LastUpdated><Message>Job put in queue</Message><State>0</State><StateName>Waiting to be processed</StateName></StatusDocumentItem>"
Run Code Online (Sandbox Code Playgroud)

.net c# xml xml-deserialization

28
推荐指数
2
解决办法
8万
查看次数

如何在不事先知道类型的情况下使用XmlSerializer反序列化可能是基类或派生类的对象?

在C#中,如何在不XmlSerializer事先知道类型的情况下使用an 反序列化可能是基类的对象,或者反序列化任何几个派生类?

我的所有派生类都添加了其他数据成员.我已经制作了一个简单的GUI,可以序列化和反序列化类对象.它将序列化对象,因为任何继承的类(甚至只是基类)都适合于用户选择填充的字段.

我对序列化没有任何问题; 问题是反序列化.如何XmlSerializer在不事先知道类的情况下将反序列化数据传递给正确的派生类?我目前创建一个XmlReader读取XML文件的第一个节点并从中确定类,它似乎适用于我的目的,但它似乎是一个非常不优雅的解决方案.

我在下面发布了一些示例代码.有什么建议?

BaseType objectOfConcern = new BaseType();
XmlSerializer xserializer;
XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME);

do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element);

string objectType = xtextreader.Name;
xtextreader.Close();

FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open);

switch (objectType)
    {
case "type1":
    xserializer = new XmlSerializer(typeof(DerivedType));

    objectOfConcern = (DerivedType)xserializer.Deserialize(fstream);

    //Load fields specific to that derived type here
    whatever = (objectOfConcern as DerivedType).NoOfstreamubordinates.ToString();

    case "xxx_1":
        //code here

    case "xxx_2":
        //code here

    case "xxx_n":
        //code here …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization derived-class xml-deserialization

20
推荐指数
3
解决办法
2万
查看次数

为什么OnDeserialization不会触发XML反序列化?

我有一个问题,我一直在抨击我的头三个小时的大部分时间.我几乎可以肯定我错过了一些令人眼花缭乱的事情......

我有一个简单的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<WeightStore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <Records>
    <Record actual="150" date="2010-05-01T00:00:00" />
    <Record actual="155" date="2010-05-02T00:00:00" />
  </Records>
</WeightStore>
Run Code Online (Sandbox Code Playgroud)

我有一个简单的类结构:

[Serializable]
public class Record
{
    [XmlAttribute("actual")] public double weight { get; set; }
    [XmlAttribute("date")]   public DateTime date { get; set; }
    [XmlIgnore]              public double trend { get; set; }
}

[Serializable]
[XmlRoot("WeightStore")]
public class SimpleWeightStore
{
    [XmlArrayAttribute("Records")]
    private List<Record> records = new List<Record>();
    public List<Record> Records { get { return records; } }

    [OnDeserialized()]
    public void OnDeserialized_Method(StreamingContext context)
    {
        // …
Run Code Online (Sandbox Code Playgroud)

c# xml-deserialization

19
推荐指数
1
解决办法
1万
查看次数