2014-12-10 1 views
0

Я решил создать функцию для инкапсуляции многих строк кода в 1 строку кода. Таким образом, этот пример скрипта. То, что я не мог получить, - получить класс Type и передать его параметру ObjectContent, чтобы он работал.Как получить тип объекта и передать его объекту ObjectContent

Посмотрите на xmlObjectType переменных в ObjectContent<xmlObjectType>(....) и System.Type присвоении xmlObjectType с использованием GetType() на переданном в объекте В параметре. Что вы делаете, чтобы получить фактический тип объекта для работы с ObjectContent?

public class XmlError 
{ 
    public string Message { get; set; } 
} 
public class XmlBuilderTools 
{ 
    public HttpResponseMessage ErrorResponse(object parmXmlErrorLayout) 
    { 
     HttpResponseMessage httpResponseMsg = new HttpResponseMessage(); 
     Type xmlObjectType = parmXmlErrorLayout.GetType(); 

     httpResponseMsg.StatusCode = HttpStatusCode.BadRequest; 
     httpResponseMsg.Content = new ObjectContent<xmlObjectType>(parmXmlErrorLayout, new XmlMediaTypeFormatter()); 
    } 
} 

//Acutual scripts... 
XmlBuilderTools xmlBuilderTools = new XmlBuilderTools(); 
XmlError xmlError = new XmlError(); 

xmlError.Message = "Foo"; 

return xmlBuilderTools.ErrorResponse(xmlError); 

Edited - Нашли обходной путь к этой проблеме. Вам не нужно вызывать его, вместо этого используйте другую перегрузку объектов, которая работает. Меня ду!

httpResponseMsg.Content = new ObjectContent(parmXmlErrorLayout.GetType(), parmXmlErrorLayout, new CustomXmlFormatter()); 
+0

В отличие от форумов, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be –

ответ

0

Вы просто не можете этого сделать. Вместо этого вы должны использовать отражение.

MethodInfo method = yourInstance.GetType().GetMethod("ObjectContent").MakeGenericMethod(new Type[] { xmlObjectType }); 
method.Invoke(this, new object[] { parmXmlErrorLayout, new XmlMediaTypeFormatter() }); 

В противном случае передайте этот тип как параметр в метод.

+0

Что такое полное пространство имен для GetType() для GetType(). GetMethod ("foo"). MakeGenericMethod() "? – fletchsod

+0

Проверьте отредактированный ответ – dario

Смежные вопросы