WCF DataMember EmitDefaultValue 关于值类型? (但设置我自己的默认值)

发布于 2024-11-13 08:32:46 字数 457 浏览 6 评论 0原文

我有以下问题:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = true)
    public bool Bar { get; set; }
}

2 个问题:

  1. 这里到底发生了什么,因为我的 bool 不能真正为 null,所以如果我发出默认值,那么会发生什么?

  2. 我如何做到这一点,以便如果有人传递没有 Bar 部分的消息,那么我的服务器默认将其设置为 true 而不是 false?


基本上,我的 bar 成员不需要通过肥皂消息传输,如果不是,我希望它默认为 true,而不是 false。我不确定正确的组合可以使我的消息大小有效(删除任何不必要的内容),然后将值默认为我想要的值(如果消息中没有该值)?

I have the following:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = true)
    public bool Bar { get; set; }
}

2 Questions:

  1. What really happens here because my bool can't really be null, so if I emit the default value then what?

  2. How do I make it so that if someone passes a message without the Bar part then it my server sets it to true instead of false by default?


Basically, my bar member is not required to be transmitted over the soap message and if it isn't I want it to default to true, not false. I'm not sure of the proper combination to make my message sizes efficient (cut out anything unnecessary) and then default the value to what I want if it isn't in the message?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天邊彩虹 2024-11-20 08:32:46

EmitDefaultValue 默认情况下为 true。

您可以尝试使用 System.ComponentModel 中的DefaultValue 属性,但我不确定它是否有效。

我刚刚测试了 DefaultValue< /code> 属性,但它不起作用。这意味着您无法更改默认值 - 将始终使用数据类型的默认值。

如果您想将 Bar 设置为 true 使用:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = false)
    public bool? Bar { get; set; }

    [OnDeserialized]
    private void SetValuesOnDeserialized(StreamingContext context)
    {
        if (!Bar.HasValue) 
        {
           Bar = true;
        }
    }
}

EmitDefaultValue is true by default.

You can try to useDefaultValue attribute from System.ComponentModel but I'm not sure if it works.

I just tested DefaultValue attribute and it doesn't work. It means that you cannot change default value - default value of the data type will be always used.

If you want to set your Bar to true use:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = false)
    public bool? Bar { get; set; }

    [OnDeserialized]
    private void SetValuesOnDeserialized(StreamingContext context)
    {
        if (!Bar.HasValue) 
        {
           Bar = true;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文