XML反序列化是从其序列化状态重新创建内存中对象的过程,该状态使用XML作为数据格式。
我需要反序列化遵循 CBI 意大利语标准的 XML,问题是我已经用命名空间标记了每个类,但我仍然无法反序列化。 这是...的一部分
如果我反序列化包含注释元素的 XML 并将其反序列化为具有有序属性的类,我会得到异常: XML 文档 (4, 25) 中存在错误。 无法投射
我正在尝试反序列化 XML 文件。 XML 的相关部分如下。 XML 文件: 我正在尝试反序列化 XML 文件。 XML 的相关部分如下。 XML 文件: <?xml version="1.0" encoding="utf-8"?> <LandXML xmlns="http://www.landxml.org/schema/LandXML-1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.landxml.org/schema/LandXML-1.2 http://www.landxml.org/schema/LandXML-1.2/LandXML-1.2.xsd" version="1.2" date="2022-06-22" time="16:31:46.94" readOnly="false" language="English"> <Units> <Metric linearUnit="meter" areaUnit="squareMeter" volumeUnit="cubicMeter" angularUnit="decimal dd.mm.ss" latLongAngularUnit="decimal degrees" temperatureUnit="celsius" pressureUnit="milliBars"/> </Units> ... 我的班级: using System; using System.Xml.Serialization; namespace MLS.SpatialViz.Hexagon { [Serializable] [XmlRoot(ElementName = "LandXML", IsNullable = true)] public class LandXML { [XmlElement(ElementName = "Units")] public Units Units { get; set; } } public class Units { [XmlAttribute(AttributeName = "linearUnit")] public string LinearUnit { get; set; } } } 我正在尝试将“meter”写入控制台。它运行但没有写入任何值。 public static void DeserealizeXML() { string FileName = @"D:\Temp\824ABF00.xml"; XmlSerializer serializer = new XmlSerializer(typeof(Hexagon.LandXML)); Hexagon.LandXML landXML; using (XmlTextReader xmlReader = new XmlTextReader(FileName)) { xmlReader.Namespaces = false; xmlReader.WhitespaceHandling = WhitespaceHandling.None; landXML = (Hexagon.LandXML)serializer.Deserialize(xmlReader); } Console.WriteLine($"LinearUnit: {landXML.Units.LinearUnit}"); Console.ReadKey(); } 我没有得到我希望得到的答案。它运行没有错误但不打印“米”。 您缺少公制类。每个 XmlElement 都需要一个对应的类才能使序列化工作。 Units 有一个 Metric 元素。你错过了那个。 使用这些课程: [Serializable] [XmlRoot(ElementName = "LandXML")] public class LandXML { [XmlElement(ElementName = "Units")] public Units Units { get; set; } } public class Units { [XmlElement(ElementName = "Metric")] public Metric Metric { get; set; } } public class Metric { [XmlAttribute(AttributeName = "linearUnit" )] public string LinearUnit { get; set; } } 然后进行此更改: Console.WriteLine($"LinearUnit: {landXML.Units.Metric.LinearUnit}"); 会输出 线性单位:米 知道有在线工具可以帮助您从 Xml 生成数据传输对象,例如 https://xmltocsharp.azurewebsites.net/ 可以做到这一点,或者您最喜欢的 IDE 可能会提供一个扩展来做同样的事情。
我得到的是包含 "信封 "的XML数据。为了简洁起见,我把重点放在 "自定义字段 "上,它是一个 "字段 "的集合。这里是类定义中给我带来问题的部分:......
我对XML反序列化没有一点麻烦。我只能通过以下方式反序列化此xml:@JacksonXmlProperty(localName =“ field”)@JacksonXmlElementWrapper(useWrapping = false)List
因此,我必须在xml文档中定义一个“数据库”,该文档必须具有学校,年级,房间,课程和学生,然后我必须用C#编写一些类,该类必须获取并保存数据到...
我继承了一种使用简单文本文件保存文档的数据存储。文档具有一些属性(日期,标题和文本),并且这些属性编码为文件名: - 。txt,...
[如果我们有使用JAXB时未初始化的最终字段,如何引入无参数构造函数?
我正在尝试使用JAXB将我的Java对象序列化为XML。为了使用JAXB,必须序列化的类必须具有no参数构造函数。但是我的问题是所有的领域都是最终的...
我想用Jaxb反序列化xml并使用生成器类下面是我的xml输入 嘿 [嘿,你好吗? 这里是在JAXB中使用不可变的类和构建器模式的示例。 @XmlRootElement(name = "Root") @XmlType(propOrder = {"head", "message"}) public class Root { @XmlRootElement(name = "Root") @XmlType(name = "RootBuilder") public static class Builder { private String head; private Message.Builder message; @XmlElement(name = "Head") public Builder setName(String head) { this.head = head; return this; } @XmlElement(name = "Message") public Builder setMessage(Message.Builder message) { this.message = message; return this; } public Root build() { return new Root(this.head, this.message.build()); } } private final String head; private final Message message; Root() { // DO NOT REMOVE. This constructor is required by JAXB throw new UnsupportedOperationException(); } Root(String head, Message message) { this.head = head; this.message = message; } @XmlElement(name = "Head") public String getHead() { return this.head; } @XmlElement(name = "Message") public Message getMessage() { return this.message; } @Override public String toString() { return "Root[head=" + this.head + ", message=" + this.message + "]"; } } public class Message { @XmlType(name = "MessageBuilder") public static class Builder { private String code; @XmlAttribute public Builder setCode(String code) { this.code = code; return this; } public Message build() { return new Message(this.code); } } private final String code; Message(String code) { this.code = code; } @XmlAttribute public String getCode() { return this.code; } @Override public String toString() { return "Message[code=" + this.code + "]"; } } Test Root root1 = new Root.Builder() .setName("Hey") .setMessage(new Message.Builder().setCode("MNP")) .build(); System.out.println(root1); StringWriter stringWriter = new StringWriter(); Marshaller marshaller = JAXBContext.newInstance(Root.class).createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); marshaller.marshal(root1, stringWriter); String xml = stringWriter.toString(); System.out.println(xml); Unmarshaller unmarshaller = JAXBContext.newInstance(Root.Builder.class).createUnmarshaller(); Root.Builder rootBuilder = (Root.Builder) unmarshaller.unmarshal(new StringReader(xml)); Root root2 = rootBuilder.build(); System.out.println(root2); 输出 Root[head=Hey, message=Message[code=MNP]] <Root><Head>Hey</Head><Message code="MNP"/></Root> Root[head=Hey, message=Message[code=MNP]]
我正在尝试从此graphml创建节点和边对象。我有一些很棒的建议,告诉我在继续研究时使用几个软件包,因为它是我追求的android实现...
我一直在VB.NET中开发Windows窗体应用程序,以解析大型的XML文档,该文档是日英字典。我最初建立了一个基于字符串的解析器,该解析器读取所有XML标记...
我正在尝试解析以XML编写的大型日语到英语词典。一个典型的条目如下所示: 1486440 美术
以下XML是JBPM为流程中使用的变量所使用的XML。换句话说,它是机器生成的。我已经尝试了好几个小时才能与杰克逊解析,却一无所获。下面...
我在尝试将一些XML反序列化为我创建的类时遇到了一个问题。我得到的错误是:XML文档(1、2)中有错误。在System.Xml.Serialization.XmlSerializer ....
第一次,很长时间。我正在尝试编写一个C#类,当对其进行序列化时,它将形成此SOAP XML字符串:
我想将xml文档反序列化为一个类,该类由相关的xsd文件生成。我无法控制xml文件的内容。在反序列化期间,我遇到了...
Jackson xml 2.9.0:@JacksonXmlElementWrapper无法与@JsonCreator和@JsonProperty构造函数一起使用
我希望我的ParentClass具有最后的字段,'brokenChildList'列表包装了xml元素,并且列表项的标签与列表不同( ]]]] 这个问题确实棘手,因为Jackson从不同的地方收集元数据:字段,getter,setter,构造函数参数。另外,您可以使用MixIn,但在您的情况下不会出现。 @JacksonXmlElementWrapper批注可以附加到FIELD和METHOD类型的元素上,这迫使您在getter上声明它。因为ParentClass是不可变的,并且您想使用构造函数构建它,所以我们还需要注释构造函数参数。这就是发生冲突的地方:您有一个带有@JsonProperty("brokenChildList")批注的构造函数参数和一个带有@JacksonXmlElementWrapper(localName = "brokenChildList")的getter,该参数重用了相同的名称。如果将localName更改为@JacksonXmlElementWrapper(localName = "brokenChildListXYZ")(添加了XYZ),则将对所有内容进行反序列化和序列化,但输出将与输入不同。 为了解决这个问题,我们可以使用com.fasterxml.jackson.databind.deser.BeanDeserializerModifier类,该类允许过滤出我们不想用于反序列化的字段,并且会产生冲突。用法示例: import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.DeserializationConfig; import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.stream.Collectors; public class XmlMapperApp { public static void main(String... args) throws IOException { SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new BeanDeserializerModifier() { @Override public List<BeanPropertyDefinition> updateProperties(DeserializationConfig config, BeanDescription beanDesc, List<BeanPropertyDefinition> propDefs) { if (beanDesc.getBeanClass() == ParentClass.class) { return propDefs.stream().filter(p -> p.getConstructorParameter() != null).collect(Collectors.toList()); } return super.updateProperties(config, beanDesc, propDefs); } }); XmlMapper xmlMapper = XmlMapper.xmlBuilder() .addModule(module) .build(); //yours code } } 为了创建此示例,我使用了版本2.10.0。 另请参见: Jackson 2.10 features Jackson Release 2.10
我具有以下结构:公共类A {公共A1Type A1 {get; set;}公共A2Type A2 {get; set;}公共A3Type A3 {get; set;}}公共A1Type {公共字符串B1 {get; set ;} ...
假设我有一个这样的类:public class Measurement {/ **进行测量的日期和时间。 * /公开的最终日期; / **测量值。 * / public ...