0

我的 ViewModel 中有一个字符串属性,其中包含十个可能的类之一的序列化表示,每个类都非常不同,因此它们没有基类。

public string Configuration { get; set; }
public string ConfigurationType { get; set;}

理想情况下,我想为每个可以反序列化到属性中的类创建一个不同的编辑器模板,它们只是有

<%= Html.EditorFor(l => l.Configuration)%>

我可以以某种方式通知 mvc Configuration 需要反序列化为 ConfigurationType 的对象,以便它使用正确的模板,然后再次反序列化回字符串。

我很感激我在这里对细节很清楚,但我想尽可能地抽象,所以我不会把水弄得太多。

4

1 回答 1

0

我认为您可能应该考虑以不同的方式处理手头的问题。我不知道你的问题的细节,但从你提供的信息来看,我认为以下可能是一个可行的解决方案:

  1. 创建一个ConfigurationBase包含 10 个类的公共属性的类。
  2. Configuration与其让属性为 type ,不如String让它为泛型,即:T。因此,您的视图模型也应该是泛型类型,其中类型参数应该被限制为ConfigurationBasenew()(因为它应该被序列化/反序列化)。
  3. 现在你的类是通用的,你不需要这个ConfigurationType属性,所以删除它。
  4. 为每个子类创建一个编辑器ConfigurationBase
  5. 或者,您可以在视图模型上创建一个方法,将配置实例序列化为String实际需要的。

检查下面的代码:

public class MyViewModel<T> where T : ConfigurationBase, new() 
{
   public T Configuration {get; set; }

   public String SerializeConfiguration() 
   {
      //return the serialized this.Configuration
   }
}
于 2012-07-28T21:21:56.873 回答