5

我正在使用 MVC3 编写一个 Web 应用程序,但是当尝试将一个对象传递给控制器​​并显示它时,它似乎无法识别类型或其他东西。

我有一个 Job 对象,并JobService返回一个Job像这样的:

public Job View(int jobId)
{
    Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
    return job;
}

在 WebService 中,我这样调用 View:

[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
    var getJobResponse = new GetJobResponse();
    getJobResponse.Job = _jobService.View(getJobRequest.Id);
    return getJobResponse.Job;
}

然后控制器调用这个:

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);
    }
}

它抛出了这个错误:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.InvalidOperationException:生成 XML 文档时出错。---> System.InvalidOperationException:类型 System.Data.Entity.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746E1054965A59B82A127B5A688C19C61D5B 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write9_Job .Serialization.GeneratedAssembly.ArrayOfObjectSerializer13.Serialize(Object objectToSerialize,

起初我将 a 传递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());
    }
}

对于 View 在测试中返回的作业,它通过了测试,所以我猜问题出在我的 web 服务上。

请帮助meeeee :'(

4

2 回答 2

3

我认为问题在于您使用的是实体框架,并且当它获取 Job 对象时,它正在创建 Job 类的动态代理。

我之前通过将以下内容添加到我的 DataContext 的构造函数中解决了这个问题

public JobDataContext()
            : base("ConnectionString")
        {
            this.Configuration.ProxyCreationEnabled = false;
        }
于 2013-08-12T15:57:10.133 回答
0

我在尝试对一些自定义类进行 XML 序列化/反序列化时遇到了类似的问题。我有一个父类和一个子类。他们俩都被宣布了[Serializable]。我遇到了您报告的相同错误,我的解决方案是将此属性添加到父类:[XmlInclude(typeof(Child))]。我认为这个声明告诉XmlSerializer,当你遇到一个Parent类型的对象,你必须序列化它时,也请考虑它可能是一个child类型的实例。它对我有用。

所以我认为你应该在你的GetJobRequest类和Job.

于 2013-08-09T17:01:51.257 回答