如何反序列化此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) 给出以下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()是可以接受的.
我有一个程序从套接字读取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 } }
<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
对象反序列化它?
我想要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>
?我想这样做而不必实现 …
我使用xsd.exe工具从我的xsd文件创建一个类后出现此错误.所以我在网上搜索并找到了解决方案.这是链接:http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html
问题是这会使代码运行,但不知何故反序列化数据似乎已损坏.我做了网站建议的内容,最后第二个数组维度总是空的(参见网站的评论,有人也有这个问题).问题是,我现在该如何解决这个问题?是否有另一种工具来创建xsd文件?我尝试过Xsd2Code,没有成功.
谢谢 :-)
我正在使用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?
我正在尝试将我从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) 在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) 我有一个问题,我一直在抨击我的头三个小时的大部分时间.我几乎可以肯定我错过了一些令人眼花缭乱的事情......
我有一个简单的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# ×8
xml ×4
.net ×1
asp.net ×1
dictionary ×1
java ×1
json ×1
python ×1
serializable ×1
xsd ×1