Asp.net mvc 3 如何在MVC3中为包含序列化类的字符串创建编辑器

Asp.net mvc 3 如何在MVC3中为包含序列化类的字符串创建编辑器,asp.net-mvc-3,polymorphism,editorfor,Asp.net Mvc 3,Polymorphism,Editorfor,我的ViewModel中有一个string属性,它包含十个可能类中的一个的序列化表示,每个类都非常不同,因此它们没有基类 public string Configuration { get; set; } public string ConfigurationType { get; set;} 理想情况下,我希望为每个类创建一个不同的编辑器模板,这些类可以反序列化到属性中,并且它们只需要 <%= Html.EditorFor(l => l.Configuration)%>

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

public string Configuration { get; set; }
public string ConfigurationType { get; set;}
理想情况下,我希望为每个类创建一个不同的编辑器模板,这些类可以反序列化到属性中,并且它们只需要

<%= Html.EditorFor(l => l.Configuration)%>
l.Configuration)%%>
我可以告诉mvc,配置需要反序列化为ConfigurationType的对象,以便使用正确的模板,然后再次反序列化为字符串


我很欣赏这里的细节,但我希望尽可能保持抽象,所以我不会把水弄脏太多。

< P>我想你可能会考虑用不同的方式来处理这个问题。我不知道你问题的细节,但根据你提供的信息,我认为以下可能是一个可行的解决方案:

  • 创建一个
    ConfigurationBase
    类,该类包含10个类的公共属性
  • 与其将
    配置
    属性的类型设置为
    字符串
    ,不如将其设置为泛型,即:
    T
    。因此,视图模型也应该是泛型类型,其中类型参数应该约束为
    ConfigurationBase
    new()
    (因为它应该被序列化/反序列化)
  • 既然您的类是泛型的,您就不需要
    ConfigurationType
    属性,所以将其删除
  • ConfigurationBase
    的每个子类创建一个编辑器
  • 或者,您可以在视图模型上创建一个方法,将配置实例序列化为
    字符串(如果实际需要)
  • 检查以下代码:

    public class MyViewModel<T> where T : ConfigurationBase, new() 
    {
       public T Configuration {get; set; }
    
       public String SerializeConfiguration() 
       {
          //return the serialized this.Configuration
       }
    }
    
    公共类MyViewModel,其中T:ConfigurationBase,new()
    {
    公共T配置{get;set;}
    公共字符串序列化配置()
    {
    //返回序列化的this.Configuration
    }
    }