数据成员默认值,如何判断是否真的发送了某些内容?

2023-11-30

默认情况下,WCF 将缺失的元素反序列化为默认值,例如 null、0 或 false。这种方法的问题在于,如果它是像数字 0 这样的基本类型,我不确定它是否意味着外部系统发送的实际值或 WCF 生成的默认值。

所以我的问题是:是否可以在运行时找出默认值是否意味着“我没有发送任何内容”。

这一点至关重要,因为我们不能仅仅因为外部系统这次没有发送特定元素(数据损坏)就用默认值更新和覆盖数据库中的现有数据。

微软的简短回答是“由接收端点来适当解释丢失的元素。”

数据成员默认值http://msdn.microsoft.com/en-us/library/aa347792.aspx

有人可以澄清一下这是什么意思吗?

Thanks


如果将数据成员定义为属性,则可以使用 setter 是否被调用来决定是否发送某些值。下面的代码显示了一个数据合约,它知道它是否反序列化了其字段。

public class Post_51ca1ead_2f0a_4912_a451_374daab0101b
{
    [DataContract(Name = "Person", Namespace = "")]
    public class Person
    {
        string name;
        int age;
        bool nameWasSent;
        bool ageWasSent;

        [DataMember]
        public string Name
        {
            get
            {
                return this.name;
            }

            set
            {
                this.nameWasSent = true;
                this.name = value;
            }
        }

        [DataMember]
        public int Age
        {
            get
            {
                return this.age;
            }

            set
            {
                this.ageWasSent = true;
                this.age = value;
            }
        }

        [OnDeserializing]
        void OnDeserializing(StreamingContext ctx)
        {
            this.ageWasSent = false;
            this.nameWasSent = false;
        }

        public override string ToString()
        {
            return string.Format("Person[Name={0},Age={1}]",
                nameWasSent ? name : "UNSPECIFIED",
                ageWasSent ? age.ToString() : "UNSPECIFIED");
        }
    }

    public static void Test()
    {
        MemoryStream ms = new MemoryStream();
        DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
        dcs.WriteObject(ms, new Person { Name = "John", Age = 30 });
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));

        string noAge = "<Person><Name>John</Name></Person>";
        ms = new MemoryStream(Encoding.UTF8.GetBytes(noAge));
        object p = dcs.ReadObject(ms);
        Console.WriteLine("No age: {0}", p);

        string noName = "<Person><Age>45</Age></Person>";
        ms = new MemoryStream(Encoding.UTF8.GetBytes(noName));
        p = dcs.ReadObject(ms);
        Console.WriteLine("No name: {0}", p);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据成员默认值,如何判断是否真的发送了某些内容? 的相关文章

  • 我可以使用 DataContract 序列化程序序列化 Dictionary 吗?

    我计划构建一个 WCF 服务 返回序列化为 JSON 的通用字典对象 不幸的是 序列化失败 因为对象可能总是不同的 KnownTypes 没有帮助 因为属性类型是 Dictionary 而且我不能说 KnownType 因为类可能总是不同
  • WCF WebGetAttribute 与 WebInvokeAttribute

    WebGetAttribute 只是 Method GET 的 WebInvokeAttribute 的语法糖吗 或者有根本的区别吗 您立即观察到 WebGet 和 WebInvoke 非常相似 这与事实相差不远 正如您已经说过的 WebG
  • 无法在 web.config 中为 WCF Web 服务设置服务名称属性

    我编写了一个运行良好的 WCF Web 服务 然后我从另一个应用程序复制了该 Web 服务的内容 并创建了一个新的 WCF 文件 该文件在 web config 中创建了一个新文件 但名称属性显示找不到命名空间 以下是我的 WCF 前几行的
  • 在.Net中使用ObjectCache缓存对象并设置过期时间

    我陷入了一个场景 我的代码如下 更新 它不是关于如何使用数据缓存 我已经在使用它及其工作 它是关于扩展它 以便该方法在到期时间和从外部源获取新数据之间不会进行调用 object string this GetDataFromCache ca
  • 捕获通信异常而不是自定义故障异常 - WCF

    在服务器上我抛出这样的异常 catch SqlException exception if exception Message Contains Custom error from stored proc Exception to be t
  • WCF服务契约上的数据注释

    我有一个 WCF 服务 其中定义了一个 DataContract 类 每个属性都有 DataMember 属性 并且我已向其中几个属性添加了几个数据注释属性 Required 和 StringLength 然后 我在 ASP NET MVC
  • 数据库连接模拟失败

    我有一个 SL4 应用程序 它使用 WCF 与后端 SQL Server 2008 数据库进行通信 由于调用的存储过程需要数据库权限 其中一项 WCF 服务需要使用专用系统帐户连接到数据库 我尝试在服务代码中使用模拟来实现解决方案 例如 i
  • 通过 IoC 容器实例化 WCF 服务

    是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的进程来实例化服务 此外 考虑到容器的类型生活方式配置与服务的 InstanceContextBehavior 之间存在潜在冲突 这种方法会是一个糟糕的主意吗 我知道我可能完全问错
  • 是否可以将 WPF Combobox.SelectedValue 绑定到多个 ObjectDataProvider?

    尝试确定是否可以使用 XAMAL 绑定将 ComboBox 的 SelectedValue 绑定到多个 ObjectDataProvider 的输入 我查看了 MultiBinding 但这似乎将多个控件组合在一起 这并不完全是我今天想要的
  • WCF:Per-Call 和 Per-Session 服务...需要说服 Per-Call 是值得的

    我们目前正在审查 WCF 服务设计 困扰我的一件事是 Per Call 和 Per Session 服务之间的决定 我相信我理解两者背后的概念 但我并没有真正看到按呼叫服务的优势 我知道使用 Per Call 服务的动机是 WCF 服务仅在
  • 如何自动执行/安排 IIS 中托管的 WCF 服务调用?

    我有一个非常简单的服务合同 用于管理自己的数据导入 类似于 using System ServiceModel namespace Company Services Domain Contract ServiceContract Name
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • WCF 客户端因服务中断而挂起

    我有一个相当简单的 WCF 服务 它为一堆智能客户端执行单向文件同步 我注意到 当通话期间出现网络或服务中断时 客户端将无法与服务器通信 直到整个应用程序重新启动 该服务运行于BasicHttpBinding并由 IIS6 一个 svc 页
  • 如何从 Azure webjob 到 Azure webapp 进行通信?

    我正在运行 Azure Web 作业和 Azure Web 应用程序 该作业定期运行 并且 Web 应用程序需要作业的结果 我如何在那里得到结果 我尝试过使用 WCFnetNamedPipeBinding但由于 Azure webapps
  • 如何在WCF Rest服务中从流上传图像

    我正在尝试创建 wcf 服务 该服务将上传 pdf doc xls 图像等文件 但 pdf txt 文件正在上传并正确打开 但是当我尝试上传图像文件时 文件正在上传 但是图像不可见 OperationContract WebInvoke M
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理

随机推荐

  • 使用 java asm 获取函数参数值以进行字节码检测

    我使用 asm 在每个执行的函数中插入回调函数 我如何打印争论者的价值观 我正在使用 MethodAdapter visitCode 将我的函数注入到运行的每个函数中 我想将函数参数插入到一个数组中 并将该数组发送给我的回调函数 并将参数返
  • 为什么某些 TemplateBinding 值未显示在设计器中,而其他值却显示在设计器中? [带有重现代码]

    我遇到了一个奇怪的情况 以下示例代码替换窗口的内容 使用设置器的背景颜色并提供带有两个标签的堆栈面板 一张用于背景 一张用于标题 问题是 他们在设计时
  • 使用 Node.js 通过 Raspberry Pi 3 model B 进行 GPIO

    我正在尝试使用树莓派 3 B 型让 LED 闪烁 我的机器上安装了所有必需的模块 即 npm nodejs pi gpio 修复了检测 gpio 的微小更改 代码是 var gpio require pi gpio gpio open 16
  • 从 Javascript 调用 Google Chrome 扩展

    有一个很棒的扩展名为Blipshot它获取页面屏幕截图 我需要使用页面级 JavaScript 调用扩展 而不是单击其图标 这可能吗 您不能从网页内调用扩展的任何方法 但是 可以将内容脚本注入网页 并使用sendMessage and on
  • AJAX 函数未返回变量

    随着我的框架的增长 我决定将其拆分为文件 而不是将其留在主设计文件中 但是 通过这样做 函数的返回不会返回任何值 数据不为空 如果我提醒 js 文件中的值 它们就在那里 功能 js 文件中的第一个函数 在执行之前包含 var lock ge
  • 将模板类的对象传递给另一个类的构造函数

    我有一个模板类 template lt typename T gt class A private T array public A int size Initialises array with size 现在我需要一个类 B 它接收类
  • 键盘箭头的扫描码是什么? (右、左、下、上)

    我需要扫描代码的箭头 右 左 下 上 我正在汇编器中制作软件 我需要知道键盘箭头扫描码的十六进制值 这些是 ASCII 代码页下部的箭头字符的字符代码 Up 0x18 向下 0x19 右 0x1A 左 0x1B 还有Unicode 中的箭头
  • Node.js 中的集群不起作用。只有一名工人始终在响应

    我正在 Node js 中练习集群 我有一个两核 CPU 我创建了两个worker 每个worker 运行一个简单的http 服务器 服务器响应回调将阻塞 5 秒 以便向其他工作人员发出下一个请求 为了验证工作人员是否并行工作 我在 Fir
  • 在运行时动态从协议实例化。类型引用

    我早些时候曾问过这个问题 所以你可以了解一些历史 这是 Airspeed Velocity 的一次很棒的尝试 但我觉得我还没有完全做到这一点 所以我将我的问题缩小到非常微小的范围细节才能真正破解 快速程序接口 您可能会抱怨或否决该问题不完整
  • C# LINQ 在列表中查找重复项

    使用 LINQ 从List
  • Jenkinsfile - 如何传递所有阶段的参数

    为了解释这个问题 假设我有 2 个詹金斯工作 作业1 PARAM TEST1 它接受一个名为 MYPARAM 的参数化值 作业2 PARAM TEST2 它还接受一个名为 MYPARAM 的参数化值 有时我需要按顺序运行这两个作业 所以我创
  • 如何在 Nhibernate 中对子集合执行 QueryOver

    您好 我有一个名为 通知 的类 它是用户的子类 public class User public int Id get set public string Name get set public string UserName get se
  • NSDictionary 分为两个数组(对象和键),然后按对象数组对两者进行排序(或类似的解决方案)

    我有一个 NSDictionary 它有键和对象 为了简单起见 键是问题编号 对象是计算的答案分数 我之前的做法是 将答案分数设置为键 将问题编号设置为对象 这样我就可以从字典中获取 allKeys 数组 对其进行排序 然后执行类似以下操作
  • 如何使用innerHTML 将对象值正确打印到DIV?

    我正在 Codecademy 上一门课程 他们的许多初学者课程都使用 console log 命令打印到控制台 不过我想尝试使用文档 GetElementById and 内部HTML但它不是打印出所选对象的详细信息 而是只打印 objec
  • C 编译器损坏:无法编译简单的测试程序

    在我的桌面和 Surface Pro 6 客户端上已停止工作 我不知道确切原因 我的桌面上写着 C Program Files JetBrains CLion 2018 3 2 bin cmake win bin cmake exe DCM
  • 我的 MYSQL 查询中哪里需要使用反引号或引号?

    我正在尝试运行以下查询 但我不确定我的是否应该为 s form id 记录的列 user id 是名为 cf id 的记录的主键 querydate 稍后将在脚本中进行回显 因为它从等于 form id 和 user id 的记录中提取日期
  • 在 Blackberry JDE 中播放 InputStream 视频

    我认为我在 Blackberry 9000 模拟器中错误地使用了 InputStream 我找到了一些示例代码 让您可以在 Blackberry 应用程序中播放视频 该代码声称它可以处理 HTTP 但需要一些技巧才能使其真正实现这一点 ht
  • Android 加速计问题

    我的游戏使用加速计 一切正常 但我注意到某些手机会出现一些小问题 游戏强制方向为横向 但某些手机的默认屏幕方向为横向 现在我一直假设用户必须倾斜手机才能正确观看游戏 这意味着 X 轴的加速度计读数将使玩家在 Y 轴上移动 而 Y 轴读数将使
  • 用新项目替换旧项目

    我有一个现有的项目 相当老了 有自己的支持系统 应用内购买 网页上的链接等 我想对应用程序的前端和后端进行重大改造 以至于基本上不会保留任何原始代码 甚至可能用 Swift 而不是 Objective C 编写 主要是因为找到 Object
  • 数据成员默认值,如何判断是否真的发送了某些内容?

    默认情况下 WCF 将缺失的元素反序列化为默认值 例如 null 0 或 false 这种方法的问题在于 如果它是像数字 0 这样的基本类型 我不确定它是否意味着外部系统发送的实际值或 WCF 生成的默认值 所以我的问题是 是否可以在运行时