2009-09-23 9 views
0

J'ai implémenté un petit service Web en utilisant .net 3.5.Problème de référence circulaire lors de l'appel d'un service Web créé en .net 3.5

J'ai utilisé les classes linq to sql pour accéder à la base de données.

Et je l'ai écrit webMethods suivantes comme suit:

using System; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Xml.Linq; 
using System.Collections.Generic; 

... 


    [WebMethod] 
    public List<restaurant_detail> restaurantDetailList() 
    { 
     return dc.restaurant_details.ToList(); 
    } 

J'utilise ici LINQ pour obtenir des données de base de données. Maintenant, quand je suis ce webservice dans exécutais mon localhost je reçois l'erreur suivante lors de l'exécution ci-dessus méthode Web:

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: A circular reference was detected while serializing an object of type restaurant_cuisine. 
    at System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(String name, String ns, Object o, Boolean writePrefixed, XmlSerializerNamespaces xmlns) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_restaurant_cuisine(String n, String ns, restaurant_cuisine o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_cuisine(String n, String ns, cuisine o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_restaurant_cuisine(String n, String ns, restaurant_cuisine o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write14_restaurant(String n, String ns, restaurant o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write15_restaurant_detail(String n, String ns, restaurant_detail o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write17_ArrayOfRestaurant_detail(Object o) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.ListOfrestaurant_detailSerializer.Serialize(Object objectToSerialize, XmlSerializationWriter writer) 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    --- End of inner exception stack trace --- 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces) 
    at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o) 
    at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue) 
    at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 
    at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 
    at System.Web.Services.Protocols.WebServiceHandler.Invoke() 

je ce qu'il ya un problème de certains serilization au moment de l'analyse du fichier xml. Mais je ne sais pas comment résoudre cela. Si quelqu'un a la solution s'il vous plaît provde moi dès que possible. Merci d'avance ...

Répondre

2

Vous devez modifier les propriétés de l'association dans votre modèle de données afin que la propriété parent ait un modificateur d'accès Internal. Cela signifie que le sérialiseur XML, qui ne fonctionne que sur les propriétés publiques, ne suivra pas la référence circulaire.

Questions connexes