将对象序列化为XML时,表示Null值的方式不同

时间:2012-07-06 12:35:32

标签: c# xml

我使用以下代码将对象序列化为XML:

using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass thisClass = new MyClass() { One = "Foo", Two = string.Empty, Three = "Bar" };
            Serialize<MyClass>(thisClass, @"C:\Users\JMK\Desktop\x.xml");
        }

        static void Serialize<T>(T x, string fileName)
        {
            XmlSerializer v = new XmlSerializer(typeof(T));
            TextWriter f = new StreamWriter(fileName);
            v.Serialize(f, x);
            f.Close();
        }
    }

    public class MyClass
    {
        public string One { get; set; }
        public string Two { get; set; }
        public string Three { get; set; }
    }
}

这导致以下XML:

<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <One>Foo</One>
  <Two />
  <Three>Bar</Three>
</MyClass>

除了一件事,这一切都很好。如果我的一个值为null,我不能在XML中省略它,它必须在那里,我不能将其表示为<Two />,而是我需要将其表示为<Two></Two>

这可以使用我目前的方法吗?

2 个答案:

答案 0 :(得分:2)

使用

[XmlElement(IsNullable = true)]
public string Two { get; set; }

您可以将其表示为<Two xsi:nil="true" />

答案 1 :(得分:0)

我相信这篇文章中的人有同样的问题吗? 也许它可以为您提供解决方案?

C# xml serialization