在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;
}
所以我的问题是:
如何在运行时创建我的对象“名称”的特定实例,并通过动态转换投射的对象对其进行分配?
请不要试图掩盖示例的逻辑,这是做一些事情的虚拟示例。当然,我可以本着同样的精神接受答案和想法,但考虑到我不“知道”被要求去上课的班级。
要使用Convert.ChangeType
,该source
对象必须实现IConvertible
。
您可以直接投射它,所以不用
Convert.ChangeType(source, typeof(T)) as T
你可以做
(T)source
或source as T
。
这是显示代码的小提琴:https : //dotnetfiddle.net/dhBeMF
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句