Fehler beim generieren des XML-Dokuments. Die Art Job war nicht zu erwarten
Schreibe ich eine web-app mit MVC3 aber beim Versuch, ein Objekt übergeben an den controller und zeigen es scheint nicht zu erkennen, die Art oder so etwas.
Habe ich ein Job-Objekt und ein JobService
Rückkehr eine Job
wie diese:
public Job View(int jobId)
{
Job job=_jobRepository.Jobs.Where(x => x.Id == jobId).FirstOrDefault();
return job;
}
Innerhalb der WebService-ich nenne Ansicht wie diese:
[WebMethod]
public Job GetJob(GetJobRequest getJobRequest)
{
var getJobResponse = new GetJobResponse();
getJobResponse.Job = _jobService.View(getJobRequest.Id);
return getJobResponse.Job;
}
Dann wird der Controller nennt dies:
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);
}
}
Und es wirft diese Fehlermeldung:
System.Web.Services.- Protokolle.SoapException: Server konnte die Anforderung nicht verarbeiten. ---> System.InvalidOperationException: Es wurde ein Fehler beim erzeugen des XML-Dokuments. ---> System.InvalidOperationException: Der Typ System.Daten.Entität.DynamicProxies.Job_55765AEC3BD02AFD7E0527408ED5746e1054965a59b82a127b5a688c19c61d5b war nicht zu erwarten. Verwenden Sie das XmlInclude-oder SoapInclude-Attribut, um anzugeben, dass Typen, die nicht bekannt sind statisch.
bei Microsoft.Xml.Serialisierung.GeneratedAssembly.XmlSerializationWriter1.Write9_Job(String n, String ns, Job-o, Boolean isNullable, Boolean needType)
bei Microsoft.Xml.Serialisierung.GeneratedAssembly.XmlSerializationWriter1.Write18_GetJobResponse(Object[] p)
bei Microsoft.Xml.Serialisierung.GeneratedAssembly.ArrayOfObjectSerializer13.Serialisieren(Objekt objectToSerialize, XmlSerializationWriter Schriftsteller)
System.Xml.Serialisierung.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- Ende der inneren Ausnahme-stack-trace - - -
System.Xml.Serialisierung.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
System.Web.Services.- Protokolle.SoapServerProtocol.WriteReturns(Object[] returnValues, Stream Ausgabestrom)
System.Web.Services.- Protokolle.WebServiceHandler.WriteReturns(Object[] returnValues)
System.Web.Services.- Protokolle.WebServiceHandler.Invoke()
--- Ende der inneren Ausnahme-stack-trace - - -
Zuerst war ich vorbei an einem GetJobResponse
um den service, aber ich habe versucht, es so einfach wie möglich zu bekommen, es funktioniert und ich kann immer noch nicht herausfinden. Ich habe gesehen, dass es andere Fragen, was auf die Verwendung von XmlInclude und Zeug, aber es funktioniert immer noch nicht.
Anwendung dieser:
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());
}
}
Den Auftrag zurückgegeben wird durch die Ansicht in einem test, übergibt es den test, ich denke das problem kommt von meinem webservice.
Bitte help meeee :'(
- sieht aus wie Ihre version des Job-Objekt ist anders als die, die der web-service erwartet. müssen Referenzen aktualisieren?
- habe versucht Sie zu aktualisieren, aber nicht beheben 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke das Problem liegt daran, dass Sie mithilfe von Entity Framework und Wann bekommt er den Job-Objekt, es ist die Schaffung eines Dynamischen Proxy der Job-Klasse.
Habe ich dieses Problem gelöst werden, bevor durch hinzufügen des folgenden in den Konstruktor von meinem DataContext
Ich hatte ein ähnliches problem als ich versucht habe, zu XML-serialisieren/Deserialisieren einige benutzerdefinierte Klassen.
Ich hatte einer übergeordneten Klasse und einer untergeordneten Klasse. Beide waren erklärte
[Serializable]
. Ich traf den gleichen Fehler, den Sie melden und meine Lösung war, fügen Sie dieses Attribut der parent-Klasse:[XmlInclude(typeof(Child))]. Ich denke, diese Deklaration sagt dem XmlSerializer, wenn Sie ein Objekt vom Typ Mutter, und Sie haben, um es zu serialisieren, bitte auch prüfen, es könnte sein, eine Instanz vom Typ Kind. Es funktionierte für mich.
So, ich denke, Sie sollten hinzufügen der korrekten Serialisierung Attribute, um Ihre
GetJobRequest
Klasse undJob
.XmlInclude
zu meinem Job-Klasse um dieJobStatus
und auch das es zu meinerwebService
als das ist die Klasse darunter meineGetJob
Methode und es immer noch wirft den Fehler 🙁