Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过http传递复杂对象_C#_Asp.net Mvc - Fatal编程技术网

C# 通过http传递复杂对象

C# 通过http传递复杂对象,c#,asp.net-mvc,C#,Asp.net Mvc,我有两个在不同服务器上运行的项目,但都引用了一个公共dll,该dll包含一个称为LeadVM的复杂类型。LeadVM包含子对象,例如包含属性的Employer。例: LeadVM.FirstName LeadVM.LastName LeadVM.Employer.Name LeadVM.Employer.Phone 因此,project 1可以创建LeadVM类型的对象,并填充它。然后,我需要通过HTTP调用将数据发布到第二个项目中的控制器/操作。第二个项目知道LeadVM对象是什么 我如何…

我有两个在不同服务器上运行的项目,但都引用了一个公共dll,该dll包含一个称为LeadVM的复杂类型。LeadVM包含子对象,例如包含属性的Employer。例:

LeadVM.FirstName
LeadVM.LastName
LeadVM.Employer.Name
LeadVM.Employer.Phone
因此,project 1可以创建LeadVM类型的对象,并填充它。然后,我需要通过HTTP调用将数据发布到第二个项目中的控制器/操作。第二个项目知道LeadVM对象是什么

我如何…序列化(?)LeadVM并将其传递给第二个项目中的接受操作

编辑:多亏了@Unicorno Marley,我最终使用了Newtonsoft JSON

现在,我只需在项目1中创建我的对象,然后执行以下代码(我确信它很笨重,但可以工作)

然后我可以使用HttpWebRequest向我的项目2发送一个web请求

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:1234/Lead/Create");
request.Method = "POST";
StreamWriter streamOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(System.Web.HttpUtility.UrlEncode(leadJSON));
streamOut.Close();
HttpWebResponse resp = null;
resp = (HttpWebResponse)request.GetResponse();
StreamReader responseReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
sResponse = responseReader.ReadToEnd();
resp.Close();
在项目2中,我可以捕获像这样发送的json,并且已经填充了项目2中的NewCustomer对象,可以使用了

var buffer = new byte[Request.InputStream.Length]; 
Request.InputStream.Read(buffer, 0, buffer.Length);
string json = System.Text.Encoding.Default.GetString(buffer);
json = System.Web.HttpUtility.UrlDecode(json);
LeadVM NewCustomer = Newtonsoft.Json.JsonConvert.DeserializeObject<PhoenixLead.LeadVM>(json);
var buffer=新字节[Request.InputStream.Length];
Request.InputStream.Read(buffer,0,buffer.Length);
string json=System.Text.Encoding.Default.GetString(缓冲区);
json=System.Web.HttpUtility.UrlDecode(json);
LeadVM NewCustomer=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);

我肯定我做事很笨拙。我会把它清理干净,但我想发布我得到的答案。

Json可能是最常见的选项,这里有一个很好的c#Json库:


或者,由于您只是在做一个HTTP post,并且您只有一个对象,所以最快的选择就是逐行写出数据并让接收方机器解析它。因为他们都知道LeadVM是什么,并且都可能有相同的定义,所以将文本字符串读入适当的变量是很简单的。但是,如果您决定在此过程中添加更多对象类型,这将很快成为较慢的选项。

是的,序列化是正确的说法。是的,我只发布了一些属性。真正的LeadVM对象有几个子对象,每个子对象都有许多属性。一个接一个地做会很乏味。谢谢你的回答。我继续使用Newtonsoft JSON的东西。我有一些问题,但我会在另一个问题中问这些问题。谢谢你的建议。事实上,你的建议让我找到了完成这项工作所需的所有代码。我用我使用的最终代码更新了我的问题。请随意评论或编辑!:)
var buffer = new byte[Request.InputStream.Length]; 
Request.InputStream.Read(buffer, 0, buffer.Length);
string json = System.Text.Encoding.Default.GetString(buffer);
json = System.Web.HttpUtility.UrlDecode(json);
LeadVM NewCustomer = Newtonsoft.Json.JsonConvert.DeserializeObject<PhoenixLead.LeadVM>(json);