WCF DataMember EmitDefaultValue on value type? (but set my own default value)

爷,独闯天下 提交于 2019-12-04 04:55:25

问题


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?


回答1:


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


来源:https://stackoverflow.com/questions/6253486/wcf-datamember-emitdefaultvalue-on-value-type-but-set-my-own-default-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!