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;
    }
}

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

相关推荐
唐青枫13 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马14 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户37215742613514 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613515 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜1 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫1 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮2 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js