2010-02-25 31 views
5

Tôi serializing một lớp học và tôi nhận được ngoại lệ sau đây:XMLSERIALIZE Exception

Bạn phải thực hiện một accessor mặc định trên System.Configuration.SettingsPropertyCollection vì nó thừa hưởng từ ICollection.

khi dòng sau được thực hiện:

XmlSerializer xs = new XmlSerializer(typeof(CustomConfiguration)); 

Bất kỳ sự giúp đỡ?

public class CustomConfiguration : ConfigurationObjectBase 
{ 

     public CustomConfiguration() { //DO NOTHING. } 

     [User] 
     public uint Version 
     { get { return ((uint)(this["Version"])); } 
      set { this["Version"] = value; } 
} 

} 

ConfigurationObjectBase có nguồn gốc từ System.configuration.ApplicationSettingsBase.

+1

Bạn có thể hiển thị bất kỳ phiên bản nào của lớp 'CustomConfiguration' (đặc biệt là thừa kế, v.v.) không? –

+0

lớp công khai CustomConfiguration: ConfigurationObjectBase { Public CustomConfiguration() { // KHÔNG GHI CHÚ. } ///

/// Version /// [User] công uint Version { được { return ((uint) (điều này [ "Version"])); } đặt { ["Phiên bản"] = giá trị này; } } } Cấu hìnhObjectBase có nguồn gốc từ System.configuration.ApplicationSettingsBase – siva

+0

Tôi có thể hỏi tại sao bạn vẫn đang cố gắng sắp xếp thứ tự này không? Có vẻ hơi lạ. –

Trả lời

4

"trình truy cập mặc định" là thuộc tính đặc biệt trả về đối tượng của bộ sưu tập dựa trên chỉ mục của nó. ví dụ:

[Serializable()] 
public class IntList : ICollection { 

    // Default Accessor Implementation 
    public int this[int index] { 
     get { 

      return 0; 
     } 
     set { /* Do Nothing */ } 
    } 
} 

Do đó không thể triển khai ở lớp bên thứ ba hiện có. Sử dụng xml serializing cho ApplicationSettings là một ý tưởng rất tồi, sử dụng các phương thức Save(), Reload() và Reset(), hoặc sử dụng các phương thức của riêng bạn không có nguồn gốc từ các lớp CustomConfiguration của ApplicationSettingsBase.

0

bạn phải có một constructor mặc định, có nghĩa là, một trong đó không có bất kỳ thông số, như vậy ....

class foo 
{ 
    public foo() {} 
} 

nếu lớp bạn đang cố gắng để serialize không có một, XMLSerializer ném ngoại lệ đó. Nếu bạn đang cố gắng serialize một built-in class, bạn sẽ phải lấy được của riêng bạn hoặc tạo một lớp wrapper.

+0

Lưu ý loại là 'System.Configuration.SettingsPropertyCollection' ... không dễ để chỉnh sửa điều đó. –

+0

Thêm hàm tạo mặc định cũng không hoạt động. – siva

+0

Ném cùng một ngoại lệ – siva