我有两个在不同服务器上运行的项目,但它们都引用了一个包含称为LeadVM的复杂类型的公共dll。 LeadVM包含子对象,如Employer,其中包含属性。例如:
LeadVM.FirstName
LeadVM.LastName
LeadVM.Employer.Name
LeadVM.Employer.Phone
因此,项目1可以创建LeadVM类型的对象,并填充它。然后,我需要通过HTTP调用将数据中的POST发送到第二个项目中的控制器/操作。第二个项目知道LeadVM对象是什么。
如何...序列化(?)LeadVM并将其传递给第二个项目中的接受行动?
编辑:感谢@Unicorno Marley,我最终使用了Newtonsoft JSON的东西。现在我只是在项目1中创建我的对象,然后执行以下代码(我确定它很笨重但是有效)。
LeadVM NewCustomer = new LeadVM();
NewCustomer.set stuff here....
var js = Newtonsoft.Json.JsonSerializer.Create();
var tx = new StringWriter();
js.Serialize(tx, NewCustomer);
string leadJSON = tx.ToString();
然后我可以使用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);
我确信我做得很尴尬。我会把它清理干净,但是想发布我所带来的答案。
答案 0 :(得分:2)
Json可能是最常见的选项,c#中有一个很好的json库可以在这里找到:
http://james.newtonking.com/json
或者,由于您只是在做一个HTTP帖子并且您只有一个对象,因此最快的选择就是逐行写出数据并让收件人机器解析它。由于他们都知道LeadVM是什么,并且两者都可能具有相同的定义,因此将文本字符串读入适当的变量将是微不足道的。如果您决定在此过程中添加更多对象类型,这将很快成为较慢的选项。