0

我正在使用 Silverlight 制作应用程序。在该应用程序中,我添加了一项 Web 服务,并且在该 Web 服务中,我有一个 Web 方法作为

[WebMethod(Description = "Write buffer log")]     
        public bool WriteLog(System.Collections.ObjectModel.ObservableCollection<LogBuffer> buffer)
        {
            bool result = true;
            .//Some code here
            return result;
        }

但我收到错误消息“无法序列化 System.Collections.IDictionary 类型的成员 System.Exception.Data,因为它实现了 IDictionary。”

其中 LogBuffer 类为

namespace WriterLog
{
   [DataContract]
    public class LogBuffer
    {
       [DataMember]
        public string Message
        {
            get;
            set;
        }
        [DataMember]
        public Exception Exception
        {
            get;
            set;
        }
        [DataMember]
        public LogType LogType
        {
            get;
            set;
        }
        [DataMember]
        public string MethodName
        {
            get;
            set;
        }
        [DataMember]
        public string DeclaringType
        {
            get;
            set;
        }
        [DataMember]
        public DateTime LogTime
        {
            get;
            set;
        }
    }
}

请帮助我。在此先感谢。

4

1 回答 1

0

Silverlight 版本的 ObservableCollection 不可序列化 http://msdn.microsoft.com/en-us/library/ms668604(v=vs.95).aspx

而是尝试使用通用列表。这是我使用的东西,它有效

[DataContractAttribute]
public class InstrumentDataField : INotifyPropertyChanged
    {
    [DataMemberAttribute]
    private string Value { get; set; }

    [DataMemberAttribute]
    public string Name { get; set; }

    public InstrumentDataField(string field, string value)
    {
        this.Name = field;
        this.Value = value;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

用法

[OperationContract]
public List<InstrumentDataField> GetInstrumentData(string browserid, long tickCount)
{
    //some code here
}
于 2012-04-26T12:51:30.117 回答