min*_*ela 5 .net c# web-services xml-serialization
我正在使用 MVC3 编写一个 Web 应用程序,但是当尝试将对象传递给控制器并显示它时,它似乎无法识别类型或其他东西。
我有一个 Job 对象,并JobService返回一个Job这样的:
public Job View(int jobId)
{
Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
return job;
}
Run Code Online (Sandbox Code Playgroud)
在 WebService 中,我像这样调用 View:
[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
var getJobResponse = new GetJobResponse();
getJobResponse.Job = _jobService.View(getJobRequest.Id);
return getJobResponse.Job;
}
Run Code Online (Sandbox Code Playgroud)
然后控制器调用这个:
public class JobsController : Controller
{
public ActionResult Index()
{
var jobModel = new JobModel();
using (var webServiceSoapClient = new WebServiceSoapClient())
{
var getJobRequest = new GetJobRequest();
getJobRequest.Id = 26038;
jobModel.Job = webServiceSoapClient.GetJob(getJobRequest);
}
return View(jobModel);
}
}
Run Code Online (Sandbox Code Playgroud)
它抛出这个错误:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.InvalidOperationException: 生成 XML 文档时出错。---> System.InvalidOperationException: 类型 System.Data.Entity.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746E1054965A59B82A127B5A688C19C61D5B 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_Job(String n, String ns, Job o, Boolean isNullable, Boolean needType) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p) 在 Microsoft.Xml .Serialization.GeneratedAssembly.ArrayOfObjectSerializer13.Serialize(Object objectToSerialize,
起初我经过一个 GetJobResponse给服务,但我现在试图让它尽可能简单以使其正常工作,但我仍然无法弄清楚。我已经看到还有其他问题建议使用 XmlInclude 和其他东西,但它仍然不起作用。
应用这个:
public string SerializeObjectToXMLString(object theObject)
{
// Exceptions are handled by the caller
using (System.IO.MemoryStream oStream = new System.IO.MemoryStream())
{
System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType());
oSerializer.Serialize(oStream, theObject);
return Encoding.Default.GetString(oStream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
对于 View 在测试中返回的 Job,它通过了测试,所以我猜问题来自我的网络服务。
请帮助我 :'(
我认为问题是因为您正在使用实体框架,当它获取 Job 对象时,它正在创建 Job 类的动态代理。
我之前已经通过将以下内容添加到我的 DataContext 的构造函数中解决了这个问题
public JobDataContext()
: base("ConnectionString")
{
this.Configuration.ProxyCreationEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6614 次 |
| 最近记录: |