C# 确保动态加载类型的向后兼容性
我有一个动态加载的类型。变量部分从数据库中的xml字段中读取。例如C# 确保动态加载类型的向后兼容性,c#,backwards-compatibility,C#,Backwards Compatibility,我有一个动态加载的类型。变量部分从数据库中的xml字段中读取。例如 class SomeClass { public int Id {get; set;} public string Name {get; set;} public string Url {get; set;} } 名称和url部分是通过读取 <element> <name>Name</name> <type>string</type>
class SomeClass
{
public int Id {get; set;}
public string Name {get; set;}
public string Url {get; set;}
}
名称和url部分是通过读取
<element>
<name>Name</name>
<type>string</type>
</element>
<element>
<name>Url</name>
<type>string</type>
</element>
从
名称
一串
网址
字符串
回退URL
一串
如何保持向后兼容性?这意味着如果我以后在类上进行扩展,我如何确保在较旧版本的dbs上部署较新版本时(有时可能是这样)不会崩溃 阅读:
特别是(摘要):
考虑对XML模式进行更改的两种情况:
案例1。新模式改变了某些元素的解释。例如,对于以前的模式有效且有意义的构造不会针对新模式进行验证
案例2。新模式扩展了名称空间(例如,通过添加新元素),但不会使以前有效的文档无效
标识新架构版本的一些选项是:
新架构),您应该更改目标命名空间。您能更清楚地了解您所关心的场景吗?我对DTO等的版本控制非常熟悉,但您的意图并不清楚。只是为了确保向后兼容性——这意味着如果包含扩展类型的版本部署在较旧的数据库上,它不会崩溃,并且只对较小的子集或属性起作用。您是否反序列化Xml?或者只是读取Xml并赋值?为了获得最佳结果和控制,请查看MSDN上的IXmlSerializable。@IAbstract OP询问的是另一件事,他想知道如何在不破坏旧代码的情况下进行序列化。@Elena使用旧版本dbs XML文件或数据库是什么意思?
class SomeClass
{
public int Id {get; set;}
public string Name {get; set;}
public string Url {get; set;}
public string FallbackUrl {get; set;}
}
<element>
<name>Name</name>
<type>string</type>
</element>
<element>
<name>Url</name>
< type>string</type>
</element>
<element>
<name>FallbackUrl</name>
<type>string</type>
</element>