问题标签 [xmlignore]

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.

0 投票
1 回答
6948 浏览

.net - XmlIgnoreAttribute,只在序列化时使用,反序列化时不使用?

我对 .NET XmlIgnoreAttribute的理解是否正确,它说:

指示 XmlSerializer 的 Serialize 方法不要序列化公共字段或公共读/写属性值。

那:

  • 该属性将被反序列化,如果存在于 XML 文件中?
  • 该属性不会被序列化为新的 XML 文件吗?

我问的原因是我已将文件中的属性替换为具有更多选项的新属性。旧属性是一个简单的布尔属性,而新属性是一个枚举。我已经更改了旧属性,以便它将新属性的值转换为布尔值,根据我添加新属性之前旧属性的含义,get 和 set 都已实现。

这使我可以通过读取设置新属性的旧属性来静默升级新文件,并在序列化时添加新属性。

但是,我想从新的 xml 文件中删除旧的属性,所以我想知道如果我用 标记它会发生什么[XmlIgnore],旧的 xml 文件仍然会正确反序列化并从文件中读取该属性,还是会被完全忽略?

如果没有,以下更改会做我想要的吗?

这将为所有新对象返回 false,由于我指定了默认值,因此将被忽略,如果存在于旧文件中并设置为 true,则会更改 ListHandling 属性,这是重要的新属性。

编辑:经过测试,我已经验证这两种方法似乎都可以满足我的要求。不过我会留下这个问题,因为我仍然想知道上面提到的第一个行为是否只是一个实现细节,或者是否可以这样理解文档。

0 投票
1 回答
2939 浏览

c# - 使用基类了解 System.Xml.Serialization.XmlIgnoreAttribute

我有两个类,如下所示:

当我序列化和实例时,SomeDerived我不希望看到SomeProperty. 不过,我愿意。我尝试过其他方法,例如SomeProperty声明为virtualinSomeBase并将其覆盖在SomeDerived. 我仍然在SomeDerived.

谁能解释一下是怎么回事XmlIgnoreAttribute

为了完整起见,我的反序列化代码如下

编辑

如果我将序列化程序声明更改为new XmlSerializer(typeof(SomeDerived)).

0 投票
1 回答
670 浏览

c# - Serialization How to dynamicly ignore all members of a specific type

I want to ignore all elements of Dictionary while serializing as those members cause an exception

example class:

What i tried(unsuccessfull)

0 投票
1 回答
4742 浏览

c# - C# Attribute XmlIgnore 和 XamlWriter 类 - XmlIgnore 不起作用

我有一个类,包含一个Brush MyBrush标记为[XmlIgnore]. 然而,它在流中被序列化,在尝试通过读取时造成麻烦XamlReader

我做了一些测试,例如当改变属性的可见性(到内部)时,它在流中消失了。不幸的是,在我的特定情况下,我无法做到这一点。

  1. 有没有人有同样的问题?
  2. 你有什么办法解决这个问题吗?

备注:据我所知,C# 4.0

这是我的单元测试中的一种方法,我在其中测试XamlSerialization

在我的一门课程中,我使用了 Property Brush。在上面的代码中,这个单元测试失败了,因为Brush值是一个对象(不可序列化)。当我删除 Setter(如下所示)时,单元测试通过。

使用XmlWriter(与上述基本相同的测试)它可以工作。在StringBuffer sb我可以看到,Property Brush当 Setter 存在而不是被移除时,它是序列化的(很可能是另一个检查忽略了属性,因为没有设置器)。其他属性[XmlIgnore]按预期忽略。

0 投票
3 回答
9994 浏览

c# - XmlIgnore 不起作用

我有一个我正在尝试序列化的对象,输出看起来像这样:

其中 Item 是类根使用的类。

在某些情况下,我想忽略 value 的值,我有这段代码

但该值仍写入输出中。

我究竟做错了什么?

0 投票
1 回答
187 浏览

asp.net-mvc-3 - MVC3 应用程序

我正在开发一个 MVC3 应用程序。我通过 ADO.NET DbContext Generator 创建了我的 POCO 类,并且我使用部分类来添加属性验证。现在,当我尝试序列化我的一个实体时,我收到此错误:

“无法序列化成员....类型为'System.Collections.Generic.ICollection`1 [.....”

我用谷歌搜索了这个错误,发现可以将标签添加 [XmlIgnore]到某些属性。但关键是我不能把这个标签放在属性上,因为它们每次都是由生成器创建的。那么我怎样才能以更简单的方式做到这一点呢?

0 投票
2 回答
973 浏览

c# - 忽略 XML 序列化中的空值

我有一块看起来像

如您所见,SubscriptionProductIdentifierType 是一个集合,在这种情况下仅包含一项。
如何忽略第二个空项目?

我尝试添加 xml 忽略,但是它会删除整个集合,如果没有数据,我只希望删除集合中的第二项。

任何帮助将不胜感激。

亲切的问候扎尔

0 投票
3 回答
10974 浏览

c# - 在嵌套属性上使用 XmlAttributeOverrides

我正在尝试使用 XmlAttributeOverrides 来控制在类被序列化后哪些类属性出现在 xml 中。它适用于“根”类上的属性,但不适用于嵌套属性。这是一个简单的示例来说明我要完成的工作。

我的类层次结构如下:

当我序列化 Main() 时,我得到如下信息:

我能做的是通过使用这个来防止出现名称或地址:

我还需要做的是让 Main.Address.ContactInfo 有时不被序列化如果它是空的)。我尝试了以下方法,但没有奏效:

和...

实际上,我已经尝试了很多,包括使用 XPath 语句来指定要定位的属性名称,但不想在尝试失败时填满此页面。通过这种方法,我要问的甚至是可能的吗?

0 投票
1 回答
1580 浏览

c# - XmlIgnore 仅在序列化中

PasswordEncryptor是我调用Encode方法进行编码的类。编码后Password,将其序列化为XmlSerializer磁盘中的文件。但是,每次程序启动时,都会对文件进行反序列化,并在set中再次对文件进行PasswordEncryptor.Encode()编码Password。有没有办法[XmlIgnore]只在反序列化中?

0 投票
0 回答
37 浏览

c# - xml序列化属性

只有当成员不为空时,类成员是否有一个 xml 序列化属性来序列化该成员?如果成员为空,我需要类似的东西,该成员应该表现得像它具有属性XmlIgnore

问候