2017-02-08 15 views
0

У меня есть класс в C#, который я пытаюсь сериализовать с помощью DataContractSerializer. Это выглядит примерно так:Игнорировать вложенные типы с DataContractSerializer

namespace Foo 
{ 
    [DataContract(Name = "Bar")] 
    class Bar 
    { 
     class A 
     { 
      public A(object a, object b, object c) 
      { 
       d = a; 
       e = b; 
       f = c; 
      } 
      public object d; 
      public object e; 
      public object f; 
     } 

     [DataMember] 
     private ArrayList lst = new ArrayList(); 
     ... 
    } 
} 

Когда я пытаюсь сериализациями этого класса, я получаю ошибку:

«System.Runtime.Serialization.SerializationException: Тип„Foo.Bar + A“с контрактом данных name '...' не ожидается. Подумайте об использовании DataContractResolver, если вы используете DataContractSerializer или добавляете любые типы, не известные статически в список известных типов. "

Что я хочу сделать, это игнорировать A. Это просто определение типа. Ни один из DataMembers, которые я пытаюсь выполнить сериализацией, имеет тип A.

Редактировать: Это код сериализации.

public void Serialize() 
{ 
    var writer = new FileStream("testoutput.xml", FileMode.Create); 
    var serializer = new DataContractSerializer(typeof(Bar)); 
    serializer.WriteObject(writer, this); 
    writer.Close(); 
} 

Исключение выбрано на serializer.WriteObject.

+0

Вы можете разместить код, в котором вы используете сериализацию объекта типа «Бар»? – peval27

+0

@ peval27 отредактировал – ifangy

+0

@ifangy ваш код отлично работает для меня. Версия .NET? – peval27

ответ

0

После ковыряться немного больше, я был в состоянии исправить это следующим образом:

[KnownType(typeof(A))] 
[DataContractAttribute] 
class A 
{ 
    public A(object a, object b, object c) 
    { 
     d = a; 
     e = b; 
     f = c; 
    } 
    [DataMember] 
    public object d; 
    [DataMember] 
    public object e; 
    [DataMember] 
    public object f; 
} 

Я думаю, что один из ArrayLists был на самом деле проведение As. Этот класс массивный, поэтому я, вероятно, просто пропустил его.

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

  • Нет связанных вопросов^_^