通过类的字符串名称将JSON对象反序列化为运行时动态创建的特定实例

伦德罗

在C#VS2017中处理多个RDLC时,我发现需要发送自己对象的特定实例。为避免大开关的困扰,我想知道是否可以通过某种方式在运行时创建实例class name

我有一个虚拟小提琴以对其进行测试,但无法完成它:https : //dotnetfiddle.net/eMwleG

到目前为止,我的代码经过大量的测试和解答,从JSON转换为Casting类型并使用反射:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Reflection;                    
public class Program
{
    public static T GetObjectAs<T>(object source, T destinationType)
   where T: class
{
     return Convert.ChangeType(source, typeof(T)) as T;
}

    public static void Main()
    {
        //From Object to string
        var nameMessage = new MessageWrapper<Name>();
        nameMessage.Message = new Name {First="Bob", Last = "Smith"};
        string serialized = JsonConvert.SerializeObject(nameMessage);

        //From String to Object
        var deserialized = JsonConvert.DeserializeObject<MessageWrapper>(serialized);
        var messageType = Type.GetType(deserialized.MessageType);

        var message = JsonConvert.DeserializeObject(Convert.ToString(deserialized.Message), messageType);

        Name myname = GetObjectAs(message, System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("Name"));

        //Name myname =  Convert.ChangeType(message,messageType) as Name;
        Console.WriteLine(myname.First);

    }
}

public class MessageWrapper<T>
{
    public string MessageType { get { return typeof(T).FullName; } }
    public T Message { get; set; }
}

public class MessageWrapper
{
    public string MessageType { get; set; }
    public object Message { get; set; }
}


public class Name
{
    public string First;
    public string Last;
}

所以我的问题是:

如何在运行时创建我的对象“名称”的特定实例,并通过动态转换投射的对象对其进行分配?

请不要试图掩盖示例的逻辑,这是做一些事情的虚拟示例。当然,我可以本着同样的精神接受答案和想法,但考虑到我不“知道”被要求去上课的班级。

苏海布·jundi

要使用Convert.ChangeType,该source对象必须实现IConvertible

您可以直接投射它,所以不用

Convert.ChangeType(source, typeof(T)) as T

你可以做

(T)sourcesource as T

这是显示代码的小提琴:https : //dotnetfiddle.net/dhBeMF

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将动态json对象反序列化为类

是否可以使用 System.Text.Json 将 json 字符串反序列化为动态对象?

将XML字符串反序列化为类

当子元素名称为动态时,将字符串反序列化为 xml

将Mongodb字符串反序列化为对象

将JSON响应反序列化为特定的类对象

Json.NET反序列化或序列化json字符串,并将属性映射到运行时定义的不同属性名称

当我将json字符串反序列化为c#对象时为空类

将JSON字符串反序列化为Class

Newtonsoft Json将具有布尔属性的动态列表反序列化为字符串

如何在C#中将类对象序列化为JSON字符串时动态设置密钥名称

将Json Schema反序列化为Json字符串或对象

避免gson将json字符串反序列化为LinkedHashMap类成员

无法将 json 字符串反序列化为 ac# 类

将Json字符串反序列化为对象Java

将json字符串反序列化为对象c#.net

将json字符串反序列化为python中的对象

将json字符串反序列化为python中的对象

将JSON对象属性反序列化为字符串

使用Jackson将JSON字符串或对象反序列化为String字段

将Json字符串反序列化为多种对象类型

如何将json字符串反序列化为对象

将json字符串反序列化为.NET对象列表

将字符串反序列化为JSON对象时出错

System.Text.Json-将嵌套对象反序列化为字符串

将一属性对象的JSON数组反序列化为字符串集合

将json twitter字符串反序列化为对象

使用Json.Net反序列化,将子对象反序列化为包含json的字符串/类似字符串?

使用动态属性名称将数据序列化为json字符串