c# - 忽略空值 - 序列化

标签 c# xml serialization asp.net-web-api

如何设置 System.Runtime.Serialization序列化程序忽略空值?

或者我必须使用 XmlSerializer为了那个原因?如果是,怎么办?

(我不想写这样的<ecommerceflags i:nil="true"/>标签,如果是null就跳过)

最佳答案

对于 System.Runtime.Serialization.DataContractSerializer,您需要使用 [DataMember(EmitDefaultValue = false)] 标记该属性。

例如,下面的代码:

class Program
{
    static void Main()
    {
        Console.WriteLine(SerializeToString(new Person { Name = "Alex", Age = 42, NullableId = null }));
    }

    public static string SerializeToString<T>(T instance)
    {
        using (var ms = new MemoryStream())
        {
            var serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(ms, instance);
            ms.Seek(0, SeekOrigin.Begin);
            using (var sr = new StreamReader(ms))
            {
                return sr.ReadToEnd();
            }
        }
    }
}

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public int? NullableId { get; set; }
}

打印以下内容:

<Person xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication4" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Age>42</Age>
  <Name>Alex</Name>
</Person>

关于c# - 忽略空值 - 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142901/

相关文章:

c# - 为什么我用这个不同步的代码反复得到相同的结果?

c# - 如何使用按钮单击更改 bool 属性?

c++ - 如何将 STX/ETX(C0 控制代码)写入 BSTR 缓冲区 IXMLDOMElement*

java - 序列化日期 : Swagger and Spring-MVC

c# - 为什么单例不能直接实现 IObjectReference?

c# - 统一公共(public)变量未与 gameObject.find 一起显示

c# - 普通文本框中的自动文本更正

java - 使用 XmlPullParser 处理 Xml 命名空间

android - 在 Android Switch 组件上定义自定义样式(主题)

java - 为什么我们每次都使用前缀 "java.io."而不导入java.io.Serialized接口(interface)