具有多个命名空间的 DataContractSerializer

2024-04-06

我正在使用 DataContractSerializer 将对象序列化为 XML。主要对象是SecurityHolding,其命名空间为“http://personaltrading.test.com/ http://personaltrading.test.com/“并包含一个名为 Amount 的属性,它是一个具有命名空间的类”http://core.test.com http://core.test.com”。当我将其序列化为 XML 时,我得到以下信息:

<ArrayOfSecurityHolding xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://personaltrading.test.com/">
  <SecurityHolding>
    <Amount xmlns:d3p1="http://core.test.com/">
        <d3p1:Amount>1.05</d3p1:Amount>
        <d3p1:CurrencyCode>USD</d3p1:CurrencyCode>
    </Amount>
    <BrokerageID>0</BrokerageID>
    <BrokerageName i:nil="true" />
    <RecordID>3681</RecordID>
  </SecurityHolding></ArrayOfSecurityHolding>

我可以控制 d3p1 前缀吗?我做错了什么或者我应该做其他事情吗?


首先,名称空间别名的选择对于格式良好的解析器应该没有影响。

但;是否必须是DataContractSerializer? With XmlSerializer,您可以使用重载Serialize接受一个XmlSerializerNamespaces。这允许您选择您使用的名称空间和别名。

最终;DataContractSerializer is not旨在提供完整的 xml 控制;这不是它的目标。如果你想要严格的xml控制,XmlSerializer是一个更好的选择,即使它较旧(并且有其自己的一些细微差别/缺点)。

完整示例:

using System;
using System.Xml.Serialization;
public class Amount
{
    public const string CoreNamespace = "http://core.test.com/";
    [XmlElement("Amount", Namespace=CoreNamespace)]
    public decimal Value { get; set; }
    [XmlElement("CurrencyCode", Namespace = CoreNamespace)]
    public string Currency { get; set; }
}
[XmlType("SecurityHolding", Namespace = SecurityHolding.TradingNamespace)]
public class SecurityHolding
{
    public const string TradingNamespace = "http://personaltrading.test.com/";

    [XmlElement("Amount", Namespace = Amount.CoreNamespace)]
    public Amount Amount { get; set; }

    public int BrokerageId { get; set; }
    public string BrokerageName { get; set; }
    public int RecordId { get; set; }
}
static class Program
{
    static void Main()
    {
        var data = new[] {
            new SecurityHolding {
                Amount = new Amount {
                    Value = 1.05M,
                    Currency = "USD"
                },
                BrokerageId = 0,
                BrokerageName = null,
                RecordId = 3681
            }
        };
        var ser = new XmlSerializer(data.GetType(),
            new XmlRootAttribute("ArrayOfSecurityHolding") { Namespace = SecurityHolding.TradingNamespace});
        var ns = new XmlSerializerNamespaces();
        ns.Add("foo", Amount.CoreNamespace);
        ser.Serialize(Console.Out, data, ns);
    }
}

Output:

<ArrayOfSecurityHolding xmlns:foo="http://core.test.com/" xmlns="http://personaltrading.test.com/">
  <SecurityHolding>
    <foo:Amount>
      <foo:Amount>1.05</foo:Amount>
      <foo:CurrencyCode>USD</foo:CurrencyCode>
    </foo:Amount>
    <BrokerageId>0</BrokerageId>
    <RecordId>3681</RecordId>
  </SecurityHolding>
</ArrayOfSecurityHolding>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个命名空间的 DataContractSerializer 的相关文章

  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • 强制

    我在网上看到了很多实现此目的的方法 但我尝试过的所有方法要么会破坏页面上的其他 CSS 要么无法一起工作 在本页http www psyklopz com workbench http www psyklopz com workbench
  • 使用 JavaScript 验证电子邮件地址文本框

    我需要验证用户从文本框出来时输入的电子邮件地址 我已经用谷歌搜索了这个 但我得到了表单验证 JScript 我不需要表单验证 我想要文本框验证 我在 JScript 下写了 但 如果电子邮件无效 则不会返回同一页面 function val
  • 如何使用 Cocoa 或 C++ 在 Mac OS X 中截取屏幕截图

    如何在 Mac OS X 中以编程方式截取桌面区域的屏幕截图 我见过两个有趣的选项 但尚未专业使用 它们是屏幕捕获实用程序和 MacFuse 演示 根据手册页 屏幕捕获实用程序从 10 2 开始就已经存在 并且可以通过使用 NSTask 链
  • 以编程方式配置 Log4NetLoggerFactoryAdapter

    我正在使用 NUnit 来测试一个项目 我想配置我的测试以编程方式设置 Common Logging 以使用 Log4Net 这是我尝试过的 NameValueCollection config new NameValueCollectio
  • 为什么分叉我的进程会导致文件被无限读取

    我已经将整个程序简化为一个简短的主程序来复制该问题 所以请原谅我它没有任何意义 input txt 是一个文本文件 其中包含几行文本 这个简化的程序应该打印这些行 但是 如果调用 fork 程序就会进入无限循环 一遍又一遍地打印文件的内容
  • 如何使用 React-Native-FS 进行 mkdir

    我正在尝试向我的 RN 应用程序添加功能 该功能将允许用户在手机的文件系统中创建新目录 我尝试编写代码 以便该函数在路径 storage emulated 0 AppName NewFolder 中创建一个目录 因为 storage emu
  • Java 相当于 session_start()、session_destroy() 和 $_SESSION['username']

    在 PHP 中 当用户登录她的帐户时 我会执行以下操作 以便在用户浏览网站时记住该用户 session start SESSION username username 在可能需要敏感数据的任何其他页面上 我检查 SESSION userna
  • Ratchet PHP - 推送消息服务

    我使用 Ratchet 查看的大多数示例都是针对聊天服务的 我目前正在构建一个应用程序 用户可以在其中登录并根据其用户 ID 从服务器接收通知 我有基本的教程 但是我很难理解以下几点 当 的时候onOpen 方法被调用 我设置了 conn对
  • R 中出现重复值并返回以逗号分隔的唯一值

    我在 R 中有以下数据框 Number ship no 4432 1 4432 2 4564 1 4389 5 6578 6 4389 3 4355 10 4355 10 我想找到重复的Number以独特的方式重复ship no Numbe
  • requests.exceptions.SSLError: [Errno 2] 没有这样的文件或目录

    我正在使用一个名为 Tweetpony 的 python 库 一切正常 除了当我使用 Pyinstaller 打包我的脚本时 我在执行时收到以下错误 Traceback most recent call last File
  • 找不到在 64 位 Windows 上运行 32 位应用程序的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId

    确实如标题 在 regedit 中查看键值存在 但 Wow6432 键 HKLM SOFTWARE Wow6432Node Microsoft Windows NT CurrentVersion 没有此键 这意味着 32 位应用程序无法在我
  • Xpath 仅选择属性的一部分

    if dt id returns comment 34232 or comment 12我怎样才能让它返回34232 or 12 换句话说 替换 comment with and if span style returns width 80
  • HTML5 音频播放器中的搜索不一致

    我想从特定时间戳开始播放音频 但我什至无法让最简单的例子正常工作 我尝试了以下方法 并进行了修改w3school 的例子 http www w3schools com tags tryit asp filename tryhtml5 av
  • htaccess 301 重定向 htaccess 或 php

    我在 Htaccess 中有一个动态 URL 重写规则 如下所示 RewriteRule cartoon html fm cart new r id 1 location 2 L 此规则导致 URL 为http localhost fm c
  • 如何在 Windows 上升级 pgAdmin 4?

    我安装了 pgAdmin 4 作为 Windows 的 postgres 安装程序的一部分 pgAdmin 现在告诉我有一个更新的版本 我有 4 8 gt 4 5 但是 我没有看到内置的升级功能 当我下载并运行 pgAdmin 4 安装程序
  • C++ 重复符号

    Mac 我尝试过命名空间 包括警卫 编译指示一次等 基本上 这是结构 CMakeLists txt add executable Game Game main cpp Game rtexture cpp 游戏 main cpp includ
  • Google 新闻 rss 参数 num 100 仅返回 30 个结果

    我用来从谷歌新闻获取结果的链接 它工作正常 但我得到的结果数量存在问题 当 num 参数超过 30 时 无论数量多少 num 参数最多返回 30 个结果 谷歌是否改变了它给出的结果数量 如果是的话有没有任何文档 提前致谢 根据source
  • 如何使用 pandas 将多行字符串合并为一行?

    我有一个包含多行的 DataFrame 有什么方法可以将它们组合成一个字符串吗 例如 words 0 I will hereby 1 am gonna 2 going far 3 to 4 do 5 this 预期输出 I will her
  • 查找与区域设置相关的一周的第一天

    给定一个NSDate 在给定用户的区域设置的情况下 如何找到该日期一周的第一天 例如 我听说有些国家将星期一视为一周的第一天 而其他国家则将星期日视为一周的第一天 在第一种情况下我需要返回前一个星期一 在后一种情况下我需要返回前一个星期日
  • 具有多个命名空间的 DataContractSerializer

    我正在使用 DataContractSerializer 将对象序列化为 XML 主要对象是SecurityHolding 其命名空间为 http personaltrading test com http personaltrading