2014-04-05 3 views
1

C#에서 클라이언트 서버 응용 프로그램을 개발 중입니다.C# client-server 개체 캐스팅 오류 목록

내 서버에서 클라이언트로 ListStudents의 서버 쪽에서 직렬화하고 클라이언트 쪽에서 deserialize하는 개체를 보내고 있습니다.

// server side serialization. 
List<Student> ordByMedGen = repo.ordByMedGen(); 
BinaryFormatter binaryFormatter = new BinaryFormatter(); 
binaryFormatter.Serialize(writer.BaseStream, ordByMedGen); 

// client side deserialization. 
BinaryFormatter bin = new BinaryFormatter(); 
List<Student> list = (List<Student>)bin.Deserialize(receive.BaseStream); 
Console.WriteLine(list.Count); 
// print the list 

내가 성공적으로 서버 측에서 문자열의 List를 전송하고 클라이언트 측에 인쇄 된이 방법을 사용하여 다음과 같이 직렬화 및 역 직렬화이다. 내 Student 클래스를했을 때 나는 SERVER.EXE를 만들려면 다음과 같은 오류를

[A]System.Collections.Generic.List 1[ServerClient.Student] cannot be cast to [B]System.Collections.Generic.List 1[ServerClient.Student]. Type A originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Type B originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.

을 얻고 client.exe가 나는 다음과 같은 명령을 사용 :

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe Server.cs Repository.cs Student.cs 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe Client.cs Student.cs 

나는 오류 또는 경고를 얻을 수 없습니다. 또한 Student 클래스에는 [Serialization] 속성이 있습니다. 웹에서 이런 종류의 오류를 검색했지만 아무 것도 찾을 수 없습니다.

나중에 편집 : 아마도 Student.cs가 서버와 클라이언트 모두에서 참조로 제공되어 컴파일러를 혼동하게 만들고 학생을 오류와 같이 2 가지 유형으로 봅니다 : A와 B?

나중에 편집 (2) :이 문제는 컴파일시에 Student.cs의 dll을 생성하여 서버 및 클라이언트에서 참조되므로 컴파일러가 혼동하지 않도록 해결할 수도 있습니다.

답변

1

클라이언트에 하나, 서버에 하나씩이 두 가지 어셈블리가있는 것처럼 들립니다. 유형은 어셈블리에 의해 정의되며 동일하더라도 : 교환 할 수 없습니다. 기본적으로 BinaryFormatter는 여기서 모든 단계에서 여러분과 싸울 것입니다. 내 조언 : BinaryFormatter를 사용하지 마십시오. 대부분의 다른 serializer (XmlSerializer, json.jet, jil, DataContractSerializer, protobuf-net 등)는 시나리오에서 완벽하게 작동하며 전혀 불평하지 않습니다.

+0

XmlSerializer로 변경되어 제대로 작동합니다. 고마워요! – user2271933