vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用

上图是visual studio 2022 中使用的粘贴功能的菜单位置

在生成的xml 中,有些是类似如下类型的

cs 复制代码
[System.Serializable]
[System.Xml.Serialization.XmlType]
public class Item
{
    private bool isVisibleField;

    private bool isVisibleFieldSpecified;

    [System.Xml.Serialization.XmlElement]
    public bool isVisible
    {
        get => isVisibleField;
        set => isVisibleField = value;
    }

    [System.Xml.Serialization.XmlIgnore]
    public bool isVisibleSpecified
    {
        get => isVisibleFieldSpecified;
        set => isVisibleFieldSpecified = value;
    }
}

从图中可以看到有IsVisible 、IsVisibleSpecified 两个,而实际的xml 中其实只有IsVisible 属性,那么为什么会出现IsVisibleSpecified 呢?这是因为标识这个IsVisible 属性是可选的属性。所以在

对这个属性进行序列化的时候,要注意,设置值的时候需要给IsVisibleSpecified 设置值,给IsVisible 属性设置值的化,在类序列化为xml 的时候,是没有效果的。

下边是一个列子,可以直观的看出来效果

cs 复制代码
using System;
using System.IO;
using System.Xml.Serialization;

public class Program
{
    public static void Main()
    {
        Item item = new Item
        {
            isVisible = true,
            isVisibleSpecified = true  // Include in XML
        };

        XmlSerializer serializer = new XmlSerializer(typeof(Item));

        using (StringWriter writer = new StringWriter())
        {
            serializer.Serialize(writer, item);
            Console.WriteLine(writer.ToString());
        }

        // Example: Omitting the "isVisible" element
        item.isVisibleSpecified = false;

        using (StringWriter writer = new StringWriter())
        {
            serializer.Serialize(writer, item);
            Console.WriteLine(writer.ToString());
        }
    }
}

[Serializable]
public class Item
{
    private bool isVisibleField;

    private bool isVisibleFieldSpecified;

    [XmlElement]
    public bool isVisible
    {
        get => isVisibleField;
        set => isVisibleField = value;
    }

    [XmlIgnore]
    public bool isVisibleSpecified
    {
        get => isVisibleFieldSpecified;
        set => isVisibleFieldSpecified = value;
    }
}

本文主要是让自己对这个问题有所记录。

相关推荐
一只小萌新.8 分钟前
【Python学习(六)——While、for、循环控制、指数爆炸】
开发语言·python·学习
SuperSwaggySUP11 分钟前
挑战春招找到java后端实习第三天(1.4)
java·开发语言
confident317 分钟前
阶梯费用计算demo
java·前端·javascript
攒了一袋星辰17 分钟前
从零开始自搭SpringBoot项目 -- Qingluopay项目工程介绍
java·spring boot·后端
Java 第一深情22 分钟前
面试题解,Java中的“对象”剖析
java·jvm
兔爷眼红了24 分钟前
前端开发语言涉及到 的注解(Annotations)
开发语言·后端·golang
꧁坚持很酷꧂38 分钟前
Qt天气预报系统设计界面布局第四部分右边
开发语言·qt
花仙子16640 分钟前
C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡
开发语言·算法·c#
AmosCloud20131 小时前
3.5 字典树(Trie)与后缀树
开发语言·数据结构·链表·c#
计算机徐师兄1 小时前
Java基于SSM框架的影院选座系统小程序【附源码、文档】
java·微信小程序·影院选座系统·影院选座系统小程序·影院选座微信小程序·影院选座