C#JavaScriptSerializer-如何序列化为基类型?

C#JavaScriptSerializer-如何序列化为基类型?,c#,javascriptserializer,C#,Javascriptserializer,我在序列化JavaScriptSerializer时遇到问题。 例如,我有一个基类 public class MyBaseClass{ public int Id { get; set; } public string Name { get; set; } } 和派生类 public class MyDerivedClass : MyBaseClass { public string Patronymic { get; set; } } 如何将MyDerivedCla

我在序列化JavaScriptSerializer时遇到问题。 例如,我有一个基类

public class MyBaseClass{
    public int Id { get; set; }
    public string Name { get; set; }
}
和派生类

public class MyDerivedClass : MyBaseClass {
    public string Patronymic { get; set; }
}
如何将MyDerivedClass的实例序列化为MyBaseClass? 以防我不希望生成的JSON包含守护神属性?
有可能吗?

好吧,通过一些扩展方法的帮助,可以实现非常通用的功能。将此类添加到项目中:

public static class Extensions
{
    //Takes one object and return a new object with type T
    public static T ToType<T>(this object value) where T : new()
    {
        var newValue = (T)Activator.CreateInstance(typeof(T));
        SetProperties(value, newValue);
        return newValue;
    }

    //Sets all properties with same name, from one source to target
    private static void SetProperties(object source, object target)
    {
        var targetType = target.GetType();
        var targetProperties = targetType.GetProperties();
        foreach (var prop in source.GetType().GetProperties())
        {
            if (targetProperties.Any(p => p.Name == prop.Name))
            {
                var propGetter = prop.GetGetMethod();
                var propSetter = targetType.GetProperty(prop.Name).GetSetMethod();
                var valueToSet = propGetter.Invoke(source, null);
                propSetter.Invoke(target, new[] { valueToSet });
            }
        }
    }
}

如何将所需的属性提取到匿名类型实例中,并将其传递给
Serialize
?@Asad,如果我(或其他人)稍后向其中一个类添加一些属性呢?我正在寻找一种保持代码整洁的通用方法。另一种方法是使用更可定制的序列化程序,例如应该是
公共类MyDerivedClass:MyBaseClass
var myDerivedObj = new MyDerivedClass { Id = 1, Name = "Test", Patronymic = "Patronymic" };
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var myDerivedString = serializer.Serialize(myDerivedObj);
var myBaseObj = myDerivedObj.ToType<MyBaseClass>(); //Converting
var myBaseString = serializer.Serialize(myBaseObj); //This string is what you want