问题标签 [xmlserializer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 为什么 XmlSerializer 这么难用?
我想像这样使用 XML 序列化:
编辑:我知道这段代码是错误的。这只是为了显示我想如何使用它。
但这根本不起作用:
- XmlSerializer 不是通用的。我必须从和反对(反)序列化。
- 每个财产都必须完全公开。为什么我们不只是使用反射来访问私有设置器?
- 私有字段不能被序列化。我想用一个属性装饰私有字段,让 XmlSerializer 包含它们。
我是否错过了什么,而 XmlSerializer 实际上提供了所描述的可能性?是否有替代的 XML 序列化程序可以更复杂地处理这些情况?
如果不是:毕竟我们是在 2010 年,而 .NET 已经存在很多年了。XML 序列化经常被使用,完全标准并且应该很容易执行。或者我的理解可能是错误的,并且 XML 序列化不应该有充分的理由公开所描述的特性?
编辑:遗产不是imo的好理由。List
起初也是非通用的。
(随意调整标题或标签。如果这应该是 CW,请记下。)
c# - XmlSerializer 和 OnSerializing/OnSerialized 替代品
我有各种复杂的对象,这些对象通常包含其他复杂对象的集合。有时我只想在需要时加载集合,因此我需要一种方法来跟踪集合是否已加载(空/空并不一定意味着它尚未加载)。为此,这些复杂对象从维护加载集合的集合的类继承。然后我们只需要在 setter 中为我们想要跟踪的每个集合添加一个函数调用,如下所示:
PropertyLoaded 函数更新一个集合,该集合跟踪已加载的集合。
不幸的是,这些对象在 Web 服务中使用,因此被(反)序列化,并且所有设置器都被调用,而 PropertyLoaded 在实际上没有被调用时被调用。
理想情况下,我希望能够使用 OnSerializing/OnSerialized 以便该函数知道它是否被合法调用,但是我们使用 XmlSerializer 所以这不起作用。尽管我很想改用 DataContractSerializer,但由于各种原因,我目前无法这样做。
有没有其他方法可以知道序列化是否正在发生?如果没有,或者是否有更好的方法来实现上述目标,而无需在每次需要跟踪新集合时都添加额外的代码?
c# - XmlSerializer 等效于 IExtensibleDataObject
使用 DataContracts,您可以从 IExtensibleDataObject 派生以允许往返工作,而不会丢失 XML 文件中任何未知的附加数据。
我不能使用 DataContract,因为我需要控制输出 XML 的格式。但我还需要能够在旧版本的应用程序中读取未来版本的 XML 文件,而不会丢失 XML 文件中的任何数据。
例如
XML v1:
XML v2:
如果从我的应用程序的 v1 读取 XML v2 文件,再次反序列化和序列化它会将其转换为 XML v1 文件。即“年龄”字段被删除。
是否有任何类似于 IExtensibleDataObject 的东西可以与 XmlSerializer 一起使用以避免 Age 字段消失?
c# - XMlSerialization 没有序列化日期时间
当我序列化一个包含 a 的对象时,DateTime
它在 XML 字符串中返回空。
请参阅下面的 XSD、从 XSD 生成的可序列化类和处理 XSD 序列化的序列化助手类。
XSD:
序列化器:
可序列化类
为什么DateTime
值被序列化为空字符串?
c# - XmlSerializer (c#) 报告有一个错误反映类型(类型=列表)
任何人都可以帮忙吗?
我有一种将对象转换为数据集的方法。在这种情况下,对象是一个集合类的集合(使用 LIST)
这是代码,但在 XmlSerializer formatter= ...
这是错误
反映类型“System.Collections.Generic.List`1[MyNameSpace.Model.InformeVehculo]”时出现错误。
我这样调用方法
objColeccionInformeVehiculo 是一个列表
我有点失落,有谁知道它为什么失败
编辑
在进一步向下查看 InnerExeption 后,最后一个显示以下内容
实际上在 InformeVehiculo 内部我已经扩展它来保存对 InformeContracto 的引用(使用部分类,它是最初由实体框架创建的模型)
InformeContrato 是它失败的地方。
这是我的课
InformeContrato 不像 InformeVehiculo 那样存在,它作为实体框架创建的部分类存在。所以我手动创建了 InformeContrato 并插入了 changeTracking 的东西..
再往下,我有一个从实体框架创建的模型复制的区域。
web-services - XmlSerializer.Deserialize 方法将时区附加到时间和日期时间字段
在 Microsoft.NET 2.0 中有一个小脚本,可将 XML 反序列化回类型化对象,使用 ServiceDescription 动态连接到 Web 服务,并将反序列化的类型化对象绑定到入站 WebMethod。序列化之前的 XML 如下所示
与 Web 服务通信时在线上如下所示
时区附加到末尾。这会导致在不同时区与 Web 服务通信时读取的时间不同。有没有让 XmlSerializer 跳过时区?或任何其他已知的解决方法?
c# - 更改属性序列化的内容
我想我已经知道这个问题的答案,但是我找不到任何可以明确说明它的东西,因此我的问题是——我想确保我没有错过任何技巧。
使用 DataContractSerializer 或 XmlSerializer,有什么方法可以更改 pulic 属性的序列化方式?我有一个属性,它是一个Enum
,我希望它被序列化为一个int
,以便它的值通过网络发送,而不是它的值的文本表示形式。是否可以使用属性来做到这一点,还是我必须编写自己的序列化程序?
谢谢 :)
c# - 从基类派生的类的 XmlSerializer 构造函数错误
以下代码指定了从基类“TestBase”派生的类型“MyBase64Binary”
如果我尝试像这样创建一个 XmlSerializer
从这个然后我得到一个 InvalidOperationException 错误:
内部异常告诉我以下内容:
如果我不是从“TestBase”类派生的,那么一切正常。
我没有得到解决方案。请帮忙。
怎么了?
来自德国的问候
一月
.net - 如何:将机器生成的类从 xsd 文件重新组装到其原始嵌套状态
我正在使用 c# 在 Visual Studio 2008 中工作。
假设我有 2 个 xsd 文件,例如“Envelope.xsd”和“Body.xsd”
我通过运行 xsd.exe 创建了 2 组类,创建了“Envelope.cs”和“Body.cs”之类的东西,到目前为止一切都很好。
我不知道如何将两个类链接到序列化(使用 XmlSerializer)到正确的嵌套 xml 中,即:
我想:
<Envelope><DocumentTitle>Title</DocumentTitle><Body>Body Info</Body></Envelope>
但我得到:
<Envelope><DocumentTitle>Title</DocumentTitle></Envelope><Body>Body Info</Body>
有人可以告诉我这两个 .cs 类应该如何使 XmlSerializer 能够运行所需的嵌套结果吗?
太感谢了
保罗
wcf - WCF 自定义 WSDL XmlSerializerOperationBehavior
我有即时构建自定义 WCF wsdl 的代码。在一种特定情况下,导出的 WSDL 应使用 XmlSerializerOperationBehavior 作为 IWsdlExportExtension,而不是使用默认的 DataContractSerializerOperationBehavior IWsdlExportExtension。
但是,每次我从 WSDL 生成代码中尝试此操作时,我都会从 XmlSerializerMessageContractExporter 的 ExportBody 方法(由 XmlSerializerOperationBehavior ExportContract 方法在 System.ServiceModel 内部使用)获得空引用异常。我已经反光了,我看不出有什么明显的错误。出于某种原因,.NET 也不想在这种情况下使用源步进......
简单地说,我可以重现这个的最基本的方法是
有人对此有任何想法吗?
非常感谢。