XmlSerializer,可序列化所有和唯一的嵌套值类型属性

我需要序列化一个类,以便序列化将包括所有嵌套的值类型属性。

我发现用英语将其概括起来有些困难(不是母语的人,因此欢迎措词的编辑),所以我将解释:

  • 如果属性是值类型-序列化其名称和值

  • 如果属性为Nullable类型:如果其值非null,则执行上述操作(有效地,序列化Nullable的Value属性);否则,将其设置为null 。否则,请不要序列化它。

  • 如果属性是类类型,请根据上述内容对类的属性进行序列化,而不要对类名进行序列化

例如,这:

public class SerializeMe

{

    public int A { get; set; }

    public int? B { get; set; }

    public int? C { get; set; }

    public MyClass MyClass { get; set;}

}


public class MyClass

{

    public int Z { get; set;}

}

如果像这样实例化:


public static void Main()

{

    var instance = new SerializeMe

    {

        A = 1,

        B = 3,

        MyClass = new MyClass { Z = 2},

    });

}

应该像这样序列化:


<SerializeMe>

  <A>1</A>

  <B>3</B>

  <Z>2</Z>

</SerializeMe>

但是我不知道该怎么做,最后我说:


<SerializeMe>

  <A>1</A>

  <B>3</B>

  <UndesiredTag><Z>2</Z></UndesiredTag>

</SerializeMe>

现在,最后一个项目符号要求是递归,但是据我从这个答案可以理解WriteXml,可能是父类可以省略<UndesiredTag>标记,而嵌套类则不能。

请注意,我当前的代码仅假设一层嵌套。如果您认为可以使用递归来解决我的问题,那会更好-因为您允许多个嵌套级别。


米琪卡哇伊
浏览 166回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP