У меня есть два проекта, которые запускаются на разных серверах, но оба имеют ссылку на общую DLL, которая содержит сложный тип LeadVM. LeadVM содержит под-объекты, такие как Employer, который содержит свойства. Пример:Пропустить сложный объект через http
LeadVM.FirstName
LeadVM.LastName
LeadVM.Employer.Name
LeadVM.Employer.Phone
Таким образом, проект 1 может создать объект типа LeadVM и заполнить его. Мне нужно затем, используя HTTP-вызов, POST в данных контроллеру/действию во втором проекте. Второй проект знает, что такое объект LeadVM.
Как я могу сериализовать (?) LeadVM и передать его принимающему действию во втором проекте?
EDIT: Благодаря @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.
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 посланный, как это и мой объект NewCustomer в проекте 2 уже заполненный, готовый к использованию.
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);
Я уверен, что делаю вещи очень неловко. Я почищу его, но хочу опубликовать ответ, к которому меня привели.
Да, сериализация - правильное слово для этого –