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

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

相关推荐
蜗牛^^O^3 分钟前
如何负责一个系统的稳定性
java
一只叫煤球的猫5 分钟前
别再把 Lambda 当匿名类:这 9 类坑你一定踩过
java·后端·面试
知识即是力量ol17 分钟前
微服务架构:从入门到进阶完全指南
java·spring cloud·微服务·nacos·架构·gateway·feign
Javatutouhouduan20 分钟前
RocketMQ是怎么保存偏移量的?
java·消息队列·rocketmq·java面试·消息中间件·后端开发·java程序员
天若有情67327 分钟前
IoC不止Spring!求同vs存异,两种反向IoC的核心逻辑
java·c++·后端·算法·spring·架构·ioc
模型时代39 分钟前
Arista暗示正在开发AI网络管理遥测工具
开发语言·人工智能·php
张3蜂44 分钟前
Python变量与命名规范:从入门到精通
开发语言·python
电商API_180079052471 小时前
京东商品评论API接口封装的心路历程
服务器·开发语言·爬虫·数据分析·php
彭于晏Yan1 小时前
LangChain4j实战三:图像模型
java·spring boot·后端·langchain
扶尔魔ocy1 小时前
【转载】QT使用linuxdeployqt打包
开发语言·qt