反序列化时重新映射单个标记
本文关键字:映射 单个标 新映射 反序列化 | 更新日期: 2023-09-27 18:14:07
我重构了如下代码:
public string CamelCASE { get; set; }
至:
public string CamelCase {get; set; }
只发现输入XML包含前一个大小写(让我们称之为呐喊骆驼(。我无法控制XML文档的生成方式。我也不想收回我的改变。
我想把声音洪亮的骆驼庄园映射成一个说话轻声细语的庄园。
我尝试过XmlElement和XmlMapping,但没有取得更大的成功。谷歌搜索只给了我关于如何将内容映射到属性的点击,就像这篇文章一样。然而,我只需要像<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会大声喊出的系统。Xml。XmlElement"不是属性类。
坦率地说,我对使用属性的建议有点困惑(这是针对.NET 2.0的(,因为我的印象是归因不可用。NET 3.5之前的版本。我错了吗?
[XmlElement("CamelCASE")]
public string CamelCase { get; set; }
如果您将shouty名称保留在xml中,则应该是您所需要的全部。如果您想在newxml中使用更安静的名称,但允许旧名称仍然有效,则会变得更复杂。您可以使用:
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*
方法而被忽略。但是,当反序列化时,只要看到<CamelCASE>
,就会使用CamelCaseLegacy
属性。然后,我们将该值映射回CamelCase
属性。
您引用了错误的命名空间。
删除
using System.Xml;
并添加
using System.Xml.Serialization;