首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让XmlSerializer将bools编码为“是”或“否”?

如何让XmlSerializer将bools编码为“是”或“否”?
EN

Stack Overflow用户
提问于 2009-03-09 05:14:30
回答 7查看 8.1K关注 0票数 17

我将xml发送到另一个程序,该程序期望布尔标志为“是”或“否”,而不是“真”或“假”。

我有一个类的定义如下:

代码语言:javascript
运行
复制
[XmlRoot()]
public class Foo {
    public bool Bar { get; set; }
}

序列化它时,我的输出如下所示:

代码语言:javascript
运行
复制
<Foo><Bar>true</Bar></Foo>

但我希望是这样:

代码语言:javascript
运行
复制
<Foo><Bar>yes</Bar></Foo>

我可以在序列化时这样做吗?我宁愿不用这样做:

代码语言:javascript
运行
复制
[XmlRoot()]
public class Foo {
    [XmlIgnore()]
    public bool Bar { get; set; }

    [XmlElement("Bar")]
    public string BarXml { get { return (Bar) ? "yes" : "no"; } }
}

请注意,我还希望能够再次反序列化这些数据。

EN

Stack Overflow用户

发布于 2009-03-09 05:37:28

非常简单。使用代理项属性。在实际属性上应用XmlIgnore。代理项是一个字符串,必须使用接受元素名称覆盖的XmlElement属性。指定重写中实际属性的名称。代理项属性根据实际属性值以不同的方式序列化。您还必须为代理程序提供一个setter,而setter应该为它序列化的任何值适当地设置实际属性。换句话说,它需要双管齐下。

狙击:

代码语言:javascript
运行
复制
    public class SomeType 
    {

        [XmlElement]
        public int IntValue;

        [XmlIgnore]
        public bool Value;

        [XmlElement("Value")]
        public string Value_Surrogate {
            get { return (Value)? "Yes, definitely!":"Absolutely NOT!"; }
            set { Value= (value=="Yes, definitely!"); }
        }

    }

点击这里获取完全可编译源示例

票数 8
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/625091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档