C# 处理某种类型的对象,而这种对象只能在运行时知道?

C# 处理某种类型的对象,而这种对象只能在运行时知道?,c#,asp.net,.net,json,jint,C#,Asp.net,.net,Json,Jint,我有一个问题,我们有一个ASP.NET web应用程序,可以为多个客户端提供服务 唯一的区别是,应用程序需要将一些JSON字符串转换为类型的.NET对象,以便将该对象传递给WCF服务 为此,我使用Newtonsoft.Json.Converter: T input = JsonConvert.DeserializeObject<T>(jsonInput); 此处输入的类型为CalcEngine.CalcInputTypes。 对于clientA和clientB CalceEngin

我有一个问题,我们有一个ASP.NET web应用程序,可以为多个客户端提供服务

唯一的区别是,应用程序需要将一些JSON字符串转换为
类型的.NET对象,以便将该对象传递给WCF服务

为此,我使用Newtonsoft.Json.Converter:

T input = JsonConvert.DeserializeObject<T>(jsonInput);
此处输入的类型为CalcEngine.CalcInputTypes。 对于clientA和clientB CalceEngine.CalcinPuttype可能具有不同的结构

实现这一目标的最佳方式是什么


谢谢。

例如,假设您的输入可以是以下两条JSON消息之一:

{
  "type": "Gizmo",
  "value": {
    "name": "Banana"
  }
}

{
  "type": "Widget",
  "value": {
    "widget_id": 7,
    "data": [4, 2, 6, 3]
  }
}
您可以通过检查
类型
,然后将
反序列化为已知的.NET类型,来决定如何反序列化传入消息。您可以使用
JToken

var input = JToken.Parse(jsonInput);
var type = input["type"].ToObject<string>();
if (type == "Gizmo")
{
    var gizmo = input["value"].ToObject<Gizmo>();
}
else if (type == "Widget")
{
    var widget = input["value"].ToObject<Widget>();
}
var input=JToken.Parse(jsonInput);
变量类型=输入[“类型”].ToObject();
如果(类型==“Gizmo”)
{
变量gizmo=input[“value”].ToObject();
}
else if(类型==“小部件”)
{
var widget=input[“value”].ToObject();
}

您如何检测要调用的客户端?当您在编译时知道要调用哪个客户机时,您在编译时就知道要为
T
Hi Scott填写什么,WCF ABC配置(在web.config中)决定要调用什么服务。问题在于传球类型。但是现在它变了,我和团队确认,传递的参数alwasy的类型具有相同的名称,但结构不同。这是另一回事,因为在代码中,我不需要知道结构,就可以将JSON字符串反序列化到该对象中,它会自动复制匹配属性的值。哦,我不能在代码中有任何特定的类型引用!例如,“Gizmo”这个东西永远都不知道,我不能假设我们会有预先确定的类型。这只能通过.config文件或其他方式配置,但不能在代码中配置。我在考虑依赖注入,但不确定。谢谢,Timothy,抱歉,看起来需求已经改变,目标对象的类型没有改变,它有相同的名称,但结构不同。在这种情况下,情况完全不同。谢谢
var input = JToken.Parse(jsonInput);
var type = input["type"].ToObject<string>();
if (type == "Gizmo")
{
    var gizmo = input["value"].ToObject<Gizmo>();
}
else if (type == "Widget")
{
    var widget = input["value"].ToObject<Widget>();
}