Como poderia um objeto obter uma referência a uma classe que está em um diferente (e não referenciado) de montagem?

StackOverflow https://stackoverflow.com/questions/831835

Pergunta

Eu tenho dois projetos: A / B. Projeto Um é o projeto que contém todos os winforms que são obrigados a objbects em B (itens de lógica)

A tem um objeto do tipo A.Form

B tem objetos do tipo B.Serializer B.Logic

Agora, A tem uma referência para B (mas B não tem uma referência a A) e A.Form contém uma variável membro do tipo B.Logic. Em algum momento, quando todos os dados são armazenados em B.Logic tento salvar este objeto no disco chamando B.Serializer (B.Logic).

Neste ponto eu recebo um erro quando a serialização dizendo que A.From não está marcado como serializável.

Mas o projeto B não tem nenhuma referência a A em tudo e mesmo que o fizesse de alguma forma ter um membro referenciando A.Form, não deve sequer compilar.

Foi útil?

Solução

O culpado de costume aqui é coisas como eventos (em B.Logic) ou outras referências de volta para objetos externos. Você pode marcar campos como não para serialização:

    [NonSerialized]
    private SomeType foo;

ou com o campo-like eventos:

    [field: NonSerialized]
    public event EventHandler Bar;

Como um aparte - a partir da descrição, eu suponho que você está usando BinaryFormatter; Pessoalmente, tenho reservas quanto a isso - é muito frágil . Eu sugiro específica não-implementação-alguma coisa; XmlSerializer, protobuf-net , Json.NET , etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top