【问题标题】:Instruct XmlSerializer to process serialized/deserialized data?指示 XmlSerializer 处理序列化/反序列化数据?
【发布时间】:2011-10-26 23:26:03
【问题描述】:

我有一个枚举属性。我希望此属性的序列化 XML 是枚举的拆分后的驼峰式字符串,反之亦然。

我有两个函数,一个是ConcatCamelCase,另一个是SplitCamelCase,我想让序列化器相应地使用它们,这可以通过用属性装饰字段来实现吗?

如果不是,还有什么其他选择,而不必弄乱所有其他字段?

【问题讨论】:

    标签: xml-serialization xmlserializer xml-attribute


    【解决方案1】:

    你必须这样做:

    public class SomeClass {
        [XmlIgnore]
        public MyEnum MyRealProperty {get;set;}
    
        [XmlElement("MyRealProperty")]
        [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
        public string MyProxyProperty
        {
            get {return SplitCamelCase(MyRealProperty);}
            set {MyRealProperty = ConcatCamelCase(value);}
        }
    }
    

    【讨论】:

    • 听起来不错。但是有没有办法覆盖某种 XML 属性以使其在没有代理道具的情况下工作?我有很多属性,如果可能的话,我不想为所有属性创建代理。谢谢约翰。
    • 对不起,没有办法做你想做的事。您的课程是如何创建的?手工制作,还是生成?如果是后者,则按照这种模式生成它们。
    • 我有很多枚举字段,我想我必须为每个字段创建代理,我认为有一个属性可以提供在字段上执行的功能,就像那里在DataAnnotations.CustomValidationAttribute :(
    • 不,从来没有。这不是需要经常做的事情。
    • 我同意。再次感谢约翰。
    【解决方案2】:

    您可以使用 XMlSerialization 属性显式设置要序列化的所有内容的名称。

    [XmlRoot("theNameYouWant")]
    
    [XmlElement("theNameYouWant")]
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多