2010-03-31 46 views
7

mã sau chỉ định một loại "MyBase64Binary" được bắt nguồn từ một lớp cơ sở "TestBase"XmlSerializer lỗi constructor với lớp có nguồn gốc từ một lớp cơ sở

using System; 
using System.Xml.Serialization; 
using System.Collections; 
using System.Xml.Schema; 
using System.ComponentModel; 

namespace Test 
{ 
    public class TestBase 
    { 
     public TestBase() 
     { 
     } 
    } 

    [XmlType(TypeName = "base64Binary"), Serializable] 
    public partial class MyBase64Binary : TestBase 
    { 
     [System.Xml.Serialization.XmlTextAttribute(DataType = "base64Binary")] 
     [EditorBrowsable(EditorBrowsableState.Advanced)] 
     public Byte[] __Value; 

     [XmlIgnore] 
     public Byte[] Value 
     { 
      get { return __Value; } 
      set { __Value = value; } 
     } 

     public MyBase64Binary() 
     { 
     } 

    } 
} 

Nếu tôi cố gắng để tạo ra một XmlSerializer như

này
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 

namespace Test1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlSerializer s = new XmlSerializer(typeof(Test.MyBase64Binary)); 
     } 
    } 
} 

từ này sau đó tôi nhận được một lỗi InvalidOperationException:

{"There was an error reflecting type 'Test.MyBase64Binary'."} 

Và Ngoại lệ bên trong cho tôi biết như sau:

{"Cannot serialize object of type 'Test.MyBase64Binary'. Consider changing type of XmlText member 'Test.MyBase64Binary.__Value' from System.Byte[] to string or string array."} 

Nếu tôi không lấy được từ lớp "TestBase" thì tất cả đều hoạt động tốt.

Tôi không nhận được giải pháp. Hãy giúp tôi.
Có gì sai?

Chúc mừng từ Đức
Jan

Trả lời

4

Nếu bạn thay đổi XmlTextAttribute thành XmlAttribute hoặc XmlElement, nó sẽ là ok. Vì bạn đang cố gắng sử dụng XmlTextAttribute, nó giả định nó sẽ là một số loại chuỗi. Nếu bạn muốn một mảng byte thực tế được tuần tự hóa, hãy thử XmlAttribute hoặc XmlElement

+1

+1, vấn đề là thuộc tính, nó không liên quan gì đến lớp cơ sở. –

+2

Xe tăng! Dường như làm việc! Nhưng tại sao bộ nối tiếp hoạt động nếu bỏ lớp cơ sở và không lấy được? Trường hợp ngoại lệ cũng không xảy ra? –

+0

@Jan Trải nghiệm cùng một vấn đề. Nếu lớp cơ sở bị bỏ qua thì nó hoạt động. Bằng cách nào đó hành vi kỳ lạ ... – Sven

-1

Liệu thêm [Serializable] đến lớp cơ sở giúp đỡ của bạn? Tôi muốn xem xét việc đảm bảo lớp cơ sở của bạn cũng được trang trí đúng cách. Tôi không biết nếu điều này sẽ giúp đỡ hay không, mặc dù.

+1

Không, việc thêm [Serializable] sẽ không hoạt động. –

+3

'XmlSerializer' ** KHÔNG ** sử dụng' SerializableAttribute'. – Venemo

Các vấn đề liên quan