2009-09-23 2 views
0

У меня есть небольшой веб-сервис с использованием .net 3.5.Проблема с круговой ссылкой при вызове веб-службы, созданной в .net 3.5

Я использовал linq для классов sql для доступа к базе данных.

И я написал следующие WebMethods следующим образом:

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

Здесь я использую LINQ для получения данных из базы данных. Теперь, когда я уверен, выполнение этого веб-сервиса в моем локальном хосте я получаю следующее сообщение об ошибке при выполнении выше веб-метода:

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() 

Я это есть проблема некоторого serilization во время разбора файла XML. Но я не знаю, как это решить. Если у кого-нибудь есть решение, пожалуйста, докажите мне как можно скорее. Заранее спасибо ...

ответ

2

Вам необходимо изменить свойства ассоциации в своей модели данных, чтобы родительское свойство имело модификатор доступа Internal. Это будет означать, что сериализатор XML, который работает только с общедоступными свойствами, не будет следовать циркулярной ссылке.

Смежные вопросы