我重构了这样的代码:
public string CamelCASE { get; set; }
为:
public string CamelCase {get; set; }
只发现输入XML包含前一个外壳(让我们称之为喊叫骆驼)。我无法控制XML文档的生成方式。我也不愿意收回我的改变。
我想将喧嚣的骆驼属性映射到一个轻声细语中。
我已经尝试了 XmlElement 和 XmlMapping ,但没有取得更大的成功。谷歌搜索只给我点击如何将内容映射到属性,沿this post行。但是,我只需要将< LoudCAMEL> 等内容反序列化为属性公共字符串QuietCamel 。
有没有顺利的方法呢?
添加属性后如下:
using System.Collections.Generic;
using System.Xml;
public class Beep : SuperBeep
{
private readonly BeepType _a;
public Beep() { _a = BeepType.SomeSome; }
public Beep(BeepType input) { _a = input; }
~Beep() { }
public override void Dispose() { }
public BeepType Aaa { get { return _a; } }
[XmlElement("CamelCASE")]
public bool CamelCase { get; set; }
}
我可以看到红色,波浪形的亮点告诉我由于其保护级别无法访问构造函数'XmlElement'。但是,当我编译时,我让IDE大声喊出'System.Xml.XmlElement'不是属性类。
坦率地说,我对使用属性的建议(这是针对.NET 2.0)感到有点困惑,因为我的印象是版本3.5之前的.NET无法使用属性。我错了吗?
答案 0 :(得分:5)
[XmlElement("CamelCASE")]
public string CamelCase { get; set; }
如果要在xml中保留shouty名称,那么应该是您所需要的。如果要在 new xml中使用较安静的名称,但允许旧名称仍然有效,则会变得更复杂。你可以使用:
public string CamelCase { get; set; }
[XmlElement("CamelCASE"), Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public string CamelCaseLegacy {
get { return CamelCase; }
set { CamelCase = value; }
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeCamelCaseLegacy() { return false; }
序列化时,CamelCase
属性将序列化为<CamelCase>
,由于CamelCaseLegacy
方法,ShouldSerialize*
元素将被忽略。但是,当反序列化时,只要看到CamelCaseLegacy
,就会使用<CamelCASE>
属性。然后,我们将此值映射回CamelCase
属性。
答案 1 :(得分:2)
您指的是错误的命名空间。
删除
using System.Xml;
并添加
using System.Xml.Serialization;