忽略空值-序列化

mat*_*yah 1 c# xml serialization asp.net-web-api

如何设置System.Runtime.Serialization串行器以忽略空值?

还是我必须为此使用XmlSerializer?如果是这样,怎么办?

(我不希望这样的<ecommerceflags i:nil="true"/>标签被写入,如果它为null,那就跳过它)

ale*_*x.b 5

随着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; }
}
Run Code Online (Sandbox Code Playgroud)

打印以下内容:

<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>
Run Code Online (Sandbox Code Playgroud)