Eri*_*let 6 c# properties version xmlserializer
我有
public bool Included { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想改为:
public bool IsIncluded { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想要向后兼容.我想只在代码中定义IsIncluded,但是能够读取属性为"Included"的旧xml.
XmlSerializer是否支持它以及如何支持它?
注意:我尝试没有成功...(不反序列化)
public bool IsIncluded { get; set; }
[Obsolete]
public bool Included
{
set { IsIncluded = value; }
get { return IsIncluded; }
}
Run Code Online (Sandbox Code Playgroud)
更新我只是想添加我更喜欢我的解决方案,因为我希望我的xml变成IsIncluded,对我而言,更合适.像我一样(下面的解决方案),将使我能够更改xml,但保持以前的版本正常工作.从长远来看,我可能会删除代码以支持旧版本.
更新2018-02-01请在下面的解决方案和建议的解决方案中查看Greg Petersen的评论.他提出了一个很好的解决方案,以便将校正封装在应该完成的地方(类).哇!!!
我找到了。我就是这样做的。
// ******************************************************************
public static SimulScenario LoadFromFile(string path)
{
if (!File.Exists(path))
{
return new SimulScenarioError(path);
}
SimulScenario simulScenario = null;
XmlTextReader reader = new XmlTextReader(path);
XmlSerializer x = new XmlSerializer(typeof(SimulScenario));
x.UnknownAttribute +=x_UnknownAttribute;
x.UnknownElement += x_UnknownElement;
x.UnknownNode += x_UnknownNode;
x.UnreferencedObject += x_UnreferencedObject;
try
{
simulScenario = (SimulScenario)x.Deserialize(reader);
}
catch (Exception)
{
return new SimulScenarioError(path);
}
finally
{
reader.Close();
}
return simulScenario;
}
static void x_UnreferencedObject(object sender, UnreferencedObjectEventArgs e)
{
}
static void x_UnknownNode(object sender, XmlNodeEventArgs e)
{
}
static void x_UnknownElement(object sender, XmlElementEventArgs e)
{
var simulChangeState = e.ObjectBeingDeserialized as SimulChangeState;
if (simulChangeState != null)
{
if (e.Element.Name == "Included")
{
bool val;
if (bool.TryParse(e.Element.InnerText, out val))
{
simulChangeState.IsIncluded = val;
}
else
{
throw new FileFormatException(Log.Instance.AddEntry(LogType.LogError, "Invalid scenario file format."));
}
}
}
}
static void x_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |