mat*_*yah 1 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; }
}
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)