如何让DataMemberAttribute使用布尔类型

时间:2009-10-19 22:25:39

标签: c# wcf-client wcf-rest

我有一个简单的测试应用程序,它从休息界面中提取xml文档。 data元素有几个字符串字段和几个布尔字段。我创建了一个简单的实体类,并在其上放置了一个DataContractAttribute,然后将DataMemberAttributes添加到每个数据成员。然后我使用HttpResponseMessage.Content.ReadAsDataContract()来解析响应。所有字符串类型都很好,但我的所有布尔类型都是假的(并且它们并不是真的假)。 xml元素类似于:

<is-enabled type="boolean">true</is-enabled>

然后在我的类型课中我有类似的东西:

[DataMember(Name="is-enabled")]
public bool isEnabled
{
    get
    {
        return this.isEnabledField;
    }
    set
    {
        this.isEnabledField = value;
    }
    }

如何正确获取布尔值?

2 个答案:

答案 0 :(得分:1)

信不信由你,DataContractSerializer对要反序列化的XML文档中元素的顺序很敏感。我敢打赌你需要设置DataMemberAttribute的Order属性,以匹配其父元素的其他子元素中“is-enabled”的实际位置。

答案 1 :(得分:0)

它似乎应该可以工作但是...我要尝试的第一件事是从数据成员名称中删除短划线“ - ”。 (de)序列化程序可能在内部阻塞破折号而不是映射到正确的成员,因此给出了默认的bool值false;

如果您认为之后需要使复合变量名更具可读性,请尝试使用下划线。