在静态函数中调用 ObjectContent 会导致“对象引用未设置为对象的实例”错误
本文关键字:设置 对象 错误 实例 对象引用 调用 静态函数 ObjectContent | 更新日期: 2023-09-27 18:34:02
来自如何获取对象类型并将其传递给 ObjectContent 的已接受答案,这是关于将class
类型传递给新创建的函数,其中包含ObjectContent
对象才能工作。
我的下一步是将其转换为静态类/函数。 尽我所能,将type.GetMethod("ObjectContent", ...)
分配给变量时methodInfo
出现异常错误。
错误消息是"对象引用未设置为对象的实例"。
type.GetMethod("ObjectContent", ...)
这里似乎有什么问题? 此问题的解决方法是什么?
public class XmlError
{
public string Message { get; set; }
}
public static class XmlBuilderTools
{
public static HttpResponseMessage ErrorResponse(object parmXmlErrorLayout)
{
HttpResponseMessage httpResponseMsg = new HttpResponseMessage();
Type type = parmXmlErrorLayout.GetType(); //typeof(parmXmlErrorLayout);
System.Reflection.MethodInfo methodInfo = type.GetMethod("ObjectContent", (System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.FlattenHierarchy));
returnHttpResponseMessage.Content = (HttpContent)methodInfo.Invoke(null, new object[] { parmXmlErrorLayout, new XmlMediaTypeFormatter() });
httpResponseMsg.StatusCode = HttpStatusCode.BadRequest;
}
}
public class Foo()
{
public HttpResponseMessage FooFoo()
{
//Acutual scripts...
XmlError xmlError = new XmlError();
xmlError.Message = "Foo";
return XmlBuilderTools.ErrorResponse(xmlError);
}
}
最初这将在非静态类/对象中工作
returnHttpResponseMessage.Content = new ObjectContent<XmlError>(xmlError, new CustomXmlFormatter());
你有
Type type = parmXmlDataLayout.GetType(); //typeof(parmXmlDataLayout);
但你通过了
object parmXmlErrorLayout
所以不应该是
Type type = parmXmlErrorLayout.GetType(); //typeof(parmXmlErrorLayout);
如果没有,那么您需要定义 parmXmlDataLayout 的实例,因为我在您的代码中任何地方都没有看到它。 因此,为什么您会从类型中得到错误。Gettype,类型可能为空
Edited by fletchsod - Alternative workaround to the problem
而不是调用,似乎还有另一个重载ObjectContent
工作得很好。 我嘟! 太多我以前没有使用过的相同对象。 问题的解决方案是
foo.Content = new ObjectContent(parmXmlErrorLayout.GetType(), parmXmlErrorLayout, new CustomXmlFormatter());