相关疑难解决方法(0)

如何在使用XmlSerializer时排除null属性

我正在序列化这样的类

public MyClass
{
    public int? a { get; set; }
    public int? b { get; set; }
    public int? c { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所有类型都可以为空,因为我希望在序列化此类对象时存储最少的数据.但是,当它仅使用"a"进行序列化时,我得到以下xml

<MyClass ...>
    <a>3</a>
    <b xsi:nil="true" />
    <c xsi:nil="true" />
</MyClass>
Run Code Online (Sandbox Code Playgroud)

如何将此设置为仅获取非null属性的xml?期望的输出将是

<MyClass ...>
    <a>3</a>
</MyClass>
Run Code Online (Sandbox Code Playgroud)

我想排除这些空值,因为会有几个属性,这是存储在数据库中(是的,这不是我的调用)所以我想保持未使用的数据最小.

c# nullable xml-serialization

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

ShouldSerialize*()vs*指定的条件序列化模式

我知道ShouldSerialize*模式和*Specified模式以及它们是如何工作的,但两者之间有什么区别吗?

当某些事情应该有条件地序列化时,是否有任何"陷阱"使用一种方法而不是另一种方法?

此问题仅供使用XmlSerializer,但也欢迎有关此主题的一般信息.

关于这个主题的信息非常少,因此可能是因为它们执行完全相同的目的而且它是一种风格选择.然而,看起来奇怪的是.NET实现者会通过反射来分析类,并查找其中一个/两个模式来确定生成的序列化程序的行为,因为它会减慢序列化程序的生成速度,除非它只是一个向后兼容性工件.

编辑: 对于那些不熟悉这两个模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性被序列化.

public string MyProperty { get; set; }

//*Specified Pattern
[XmlIgnore]
public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } }

//ShouldSerialize* Pattern
public bool ShouldSerializeMyProperty()
{
     return !string.IsNullOrWhiteSpace(this.MyProperty);
}
Run Code Online (Sandbox Code Playgroud)

.net c# serialization xml-serialization xmlserializer

19
推荐指数
2
解决办法
7851
查看次数

序列化为XML时,在可空值类型上防止<xsi:nil ="true">

我在可序列化类中添加了一些可以为null的值类型.我执行序列化使用XmlSerializer但是当值设置为时null,我得到一个空节点xsi:nil="true".这是我在Xsi中找到的正确行为:nil属性绑定支持.

有没有办法关闭此选项,以便在值类型为时输出任何内容null

.net serialization xml-serialization xml-nil

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

Unity可为空的整数作为检查器字段

Serializable为检查员创建了一个类。

[Serializable]
public class CellType
{
    [SerializeField]
    public int? Cost; // This does not appear in the inspector

    [SerializeField]
    public Color MaterialColor;
}
Run Code Online (Sandbox Code Playgroud)

可为空的字段Cost不会出现在检查器中。我通过创建一个SerializeField

[SerializeField]
private CellType[] types;
Run Code Online (Sandbox Code Playgroud)

如果该字段Cost为默认int,则该字段将出现。有解决方法吗?

c# unity-game-engine

5
推荐指数
0
解决办法
577
查看次数

如何反序列化 Nullable&lt;bool&gt;?

我正在尝试Nullable<bool>从我的 XML 文件中反序列化 a 。我的期望是在我的 XMLElement 中找不到的 XMLAttribute 是null,如果找到,它将是truefalse。序列化也一样。如果它不为空,我的变量将被写入。

无论如何,每次我试图反序列化我的 XML 时,InvalidOperationException都会被抛出。

我的班级看起来像这样

[XMLArray("Users")]
public class User
{
    [XMLAttribute("copy")]
    public bool? copy;
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# xml nullable xml-deserialization

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

如果为null或为空,如何忽略序列化中的可空属性?

我有一个用于Xml序列化的类.

在其中我有一个可以使用XmlAttribute修饰的可空属性:

 [XmlAttribute("lastUpdated")]
 public DateTime? LastUpdated { get; set; }
Run Code Online (Sandbox Code Playgroud)

如果属性为null或为空,如何忽略序列化的属性?

我已经尝试过以下但是当有值时它不会序列化(总是忽略):

  [XmlIgnore]
        public DateTime? LastUpdatedValue { get; set; }

        [XmlAttribute("lastUpdated")]
       public DateTime LastUpdated { get; set; }

        public bool ShouldSerializeLastUpdated()
        {
            return LastUpdatedValue.HasValue;
        }
Run Code Online (Sandbox Code Playgroud)

c# xml asp.net serialization

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