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; }
}

如何将 MyDerivedClass 的实例序列化为 MyBaseClass? 如果我不希望生成的 JSON 包含 Patronymic 属性? 可能吗?

最佳答案

好吧,在扩展方法的帮助下,可以做一些非常通用的事情。将此类添加到您的项目中:

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 });
            }
        }
    }
}

然后您可以使用此代码将 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

关于C# JavaScriptSerializer - 如何序列化为基本类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223879/

相关文章:

c# - 让 VS2015 验证 C# 早期语法以保持与 VS2013 兼容的方法

c# - 如何将流中的图像另存为在 retrofit2 中发送到 wcf web 服务

c# - 如何在堆栈面板中滚动数据网格?

c# - 使用 JavaScriptSerializer.DeserializeObject 如何取回使用不区分大小写的字符串比较器的字典?

c# - 使用 JSON 反序列化方法时 VS 2013 崩溃

jquery - 为什么 Web 服务返回数据为 msg.d

c# - 元组的 Json 反序列化问题?

c# - WixSharp 注入(inject)多个自定义 CLR 对话框

c# - 在 .NET 4.5 中找不到 HttpClient

javascript - jQuery JSON 发布 : Invalid object passed in, ':' 或 '}' 预期