0

Silverlight を使用してアプリケーションを作成しています。そのアプリケーションでは、1 つの Web サービスを追加し、その Web サービスには 1 つの Web メソッドがあります。

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

しかし、「IDictionary を実装しているため、System.Collections.IDictionary 型のメンバー System.Exception.Data をシリアル化できません。」というエラーが表示されます。

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

ObservableCollection の Silverlight バージョンはシリアル化できません http://msdn.microsoft.com/en-us/library/ms668604(v=vs.95).aspx

代わりに Generic List を使用してみてください。ここに私が使用しているものがあります

[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 に答える