序列化为 XML 时忽略属性

2024-01-08

我有一个基类,里面有很多大类。

例如,假设Person班级。在它的内部,有一个Payment类,里面有一个CreditCard上课,等等……

我正在尝试序列化Person类,我想排除其中的某些类。

在这个例子中,我试图序列化Person类并忽略整个付款类。这就是我到目前为止所做的,但它不起作用。

你们能帮我弄清楚如何实现这一目标吗?谢谢

        XmlAttributes att = new XmlAttributes { XmlIgnore = true };
        XmlAttributeOverrides xOver = new XmlAttributeOverrides();
        xOver.Add(typeof(Payment), "Payment", att);
        SerializeContractsRequest(items, xOver);

public static string Serialize<T>(T clrObject, XmlAttributeOverrides xmlOverrides) where T : class, new()
{
    XmlSerializer xs = xmlOverrides == null ? new XmlSerializer(typeof(T)) : new XmlSerializer(typeof(T), xmlOverrides);
    string xml = string.Empty;

    //A string builder that will hold the converted business object as an xml string
    StringBuilder sb = new StringBuilder();

    //The stream that will write the serialized xml to the stringbuilder object
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Encoding = Encoding.UTF8;

    XmlWriter writer = XmlWriter.Create(sb, settings);

    xs.Serialize(writer, clrObject);

    xml = sb.ToString();

    return xml;
}

另外,我不被允许触摸Payment类 XML 属性。例如,我不允许添加[XmlIgnore] on Payment Class.

我只需要在一种方法上使用此方法,因此这就是我想要应用覆盖的地方。不过,仅供参考,这就是Payment类有:

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="Payment", Namespace="http://schemas.datacontract.org/2004/07/ServicesLayer")]
    [System.SerializableAttribute()]
public partial class Payment
{

}

当您指定覆盖时,您传入包含该属性的类型:

using System.Collections.Generic;
using System.IO;
using System.Windows;
using System.Xml.Serialization;

namespace WpfApplication10
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            var person = new Person
            {
                Payment = new Payment { Amount = 100 },
                Payments = new List<Payment>
                {
                    new Payment { Amount = 200 }, 
                    new Payment { Amount = 400 }
                }
            };

            var attributes = new XmlAttributes { XmlIgnore = true };

            var overrides = new XmlAttributeOverrides();
            overrides.Add(typeof(Person), "Payment", attributes);
            overrides.Add(typeof(Person), "Payments", attributes);

            var serializer = new XmlSerializer(typeof(Person), overrides);
            using (var stringWriter = new StringWriter())
            {
                serializer.Serialize(stringWriter, person);
                string s = stringWriter.ToString();
            }
        }
    }

    public class Person
    {
        public List<Payment> Payments { get; set; }
        public Payment Payment { get; set; }
        public int SomethingElse { get; set; }
    }

    public class Payment
    {
        public decimal Amount { get; set; }
    }
}

Result :

<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SomethingElse>0</SomethingElse>
</Person>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化为 XML 时忽略属性 的相关文章

随机推荐

  • Erlang 进程与 Java 线程

    我在读Sa a Juri 所著的 Elixir in Action 一书 第一章 https manning content s3 amazonaws com download b b915834 e80b 4520 939d ff1900
  • Delphi 中的嵌套属性

    Delphi 有没有办法使用嵌套属性 目前我正在使用Delphi XE 例如 TCompoundAttribute class TCustomAttribute public constructor Create A1 A2 TCustom
  • 有没有办法在函数运行完成后运行其他函数?

    def foo pass def bar print good bay 两个功能如打击 现在我想在 foo run 完成后运行 bar 函数 有没有类似类使用的方法 del 据我所知 在课堂方法中我可以使用 del 就像下面这样 class
  • 在表中存储/检索数组的最佳方法

    我目前在 MySQL 中有一个表可以正常存储值 但我想向该表添加一个字段来存储值数组 例如城市 我应该简单地将该数组存储为 CSV 吗 每行都需要它自己的数组 因此我对创建一个新表并为前一个表中插入的每行插入 2 5 行感到不安 我觉得这种
  • 如何在 JavaFX TableView 中的行悬停时发生某些事情?

    现在 当在表格视图中选择一行时 我会在鼠标位置显示对话框 我希望当我将鼠标悬停在每一行上时显示对话框 似乎有一个 CSS hover 所以我认为它可以以某种方式在 java 代码中捕获 您可以创建一个自定义表行工厂 它将侦听器添加到行的悬停
  • 为什么我不能在 std::vector 中使用抽象类?

    我是从这些问题中得出的 为什么我们不能声明 std vector https stackoverflow com questions 2160920 why cant we declare a stdvectorabstractclass
  • 将 $mysqli 设置为 OOP 的全局变量

    好的 这是一个复杂的问题 但任何帮助或建议将非常感激 所以我正在与一个网站合作 使用 htaccess 将所有流量重定向到load php 对于任何sql功能 我有一个抽象类 它有很多查询语句作为传递参数来定义每个查询的细节的函数 例如 t
  • 如何防止 Netlify 因为 process.env.CI = true 将警告视为错误?

    在 Netlify 上部署新项目开始失败 检查日志 我看到以前成功部署的日志中没有的内容 Treating warnings as errors because process env CI true Most CI servers set
  • 以编程方式安排 AWS Lambda 一次性执行

    我有两个 AWS Lambda 函数 我希望 Lambda A 确定某个时间点 例如 2022 年 5 月 4 日 10 00 然后我希望 Lambda B 被安排在这个特定的时间点运行 我可能可以通过使用 Lambda A 以编程方式创建
  • 在 Shiny 应用程序中使用 Font Awesome 5.7 图标

    Shiny s icon 功能仅支持 Font Awesome 4 7 图标 可以在此处找到 Shiny 支持的图标的完整列表 https fontawesome com v4 7 0 icons 自那以后 Font Awesome 已多次
  • 如何为 Windows 安装程序创建清单?

    我们的应用程序有一个安装程序 必须像许多其他安装程序一样以管理员权限下载和运行 但是 安装程序未命名为 setup exe 因此 Windows 不会自动检测到它需要提升才能运行 坦率地说 更改安装程序名称以使事情正确提升听起来相当混乱 本
  • 如何在 PHPStorm (WebStorm) 中调试 grunt

    有人对在 PHP Storm 中调试 grunt 例如事件侦听器函数 有个好主意 Storm 中有 Node js 支持 但如果我想调试 grunt 任务 例如当文件更改并且监视任务发出它时 我不确定如何配置调试设置 我使用Windows
  • 带范围运算符的 Perl 上下文是什么?

    我是 Perl 新手 我想结合范围运算符来理解 Perl 上下文 这是我的代码 use strict use warnings my asc 10 50 print asc n 我有两个疑问 如果表达式 10 50 返回一个数组 那么 由于
  • ReversedWildcardFilterFactory 如何加速通配符搜索?

    索尔docs http wiki apache org solr AnalyzersTokenizersTokenFilters solr ReversedWildcardFilterFactory say solr ReversedWil
  • OpenGL 4.0 GPU 绘图功能?

    在维基百科和其他来源对 OpenGL 4 0 的描述中 我读到了有关此功能的信息 绘制由 OpenGL 或 OpenCL 等外部 API 生成的数据 无需 CPU 干预 这是指什么 Edit 看来这一定是指我的 Draw Indirectb
  • 如何根据斜率和截距添加线

    在R中 有一个函数叫做abline其中可以根据截距 第一个参数 和斜率 第二个参数 的规范在图上绘制一条线 例如 plot 1 10 1 10 abline 0 1 其中截距为 0 斜率为 1 的线跨越绘图的整个范围 Matplotlib中
  • 使用 Octave 制作轨迹动画

    我有一套 x y 描述物体运动轨迹的坐标 我想使用 GNU Octave 制作该轨迹的动画 数据集非常大 因此如果我希望动画流畅 我将无法在每次迭代时重新绘制整个绘图 有哪些函数可以让我 更新 绘图而不是重新绘制它 另外 我还有另外一套 v
  • LinkedList (2.0):迭代删除项目

    我需要迭代LinkedList
  • 如何让 Emacs 显示空格?

    如何让 Emacs 显示空白 如空格 制表符 跳行等 许多其他编辑器 例如 Kate 和 Eclipse 都具有此功能 我发现它非常有用 可以查看代码何时因空格和制表符的混合而出现缩进中断 尤其是 Python 空白 https www e
  • 序列化为 XML 时忽略属性

    我有一个基类 里面有很多大类 例如 假设Person班级 在它的内部 有一个Payment类 里面有一个CreditCard上课 等等 我正在尝试序列化Person类 我想排除其中的某些类 在这个例子中 我试图序列化Person类并忽略整个