2012-02-08 6 views
1

저는 .NET으로 데스크톱 응용 프로그램을 개발하고 있습니다. 이전에 저장 한 파일을 읽을 수있는 가능성을 유지하면서 새로운 필드를 추가하는 것과 같이 저장중인 데이터를 자유롭게 변경할 수있는 방식으로 파일에 일부 데이터를 저장하고 싶습니다.DataContracts를 사용하도록 응용 프로그램을 설정하는 방법은 무엇입니까?

This answerBinaryFormatter 대신 DataContractSerializer을 사용하도록 권장합니다.

그러나 프로젝트에서 내 클래스에 [DataContract] 속성을 사용할 수 없습니다. using System.Runtime.Serialization; 이후에도 알 수없는 유형에 대해서는 여전히 오류가 발생합니다.

이 프로젝트는 .NET 프레임 워크에게 내가 데이터 계약은 WCF 프레임 워크의 일부임을 배웠다 4.

을 대상으로, 나는 어떻게 든 그것을 사용하는 내 프로젝트를 구성해야합니다 가정합니다. 방법?

public interface ICustomerInfo 
{ 
    string ReturnCustomerName(); 
} 

[DataContract(Name = "Customer")] 
public class CustomerTypeA : ICustomerInfo 
{ 
    public string ReturnCustomerName() 
    { 
     return "no name"; 
    } 
} 

[DataContract(Name = "Customer")] 
public class CustomerTypeB : ICustomerInfo 
{ 
    public string ReturnCustomerName() 
    { 
     return "no name"; 
    } 
} 

[DataContract] 
[KnownType(typeof(CustomerTypeB))] 
public class PurchaseOrder 
{ 
    [DataMember] 
    ICustomerInfo buyer; 

    [DataMember] 
    int amount; 
} 

당신이 그렇지 않으면 직렬화 엔진이 없습니다 ICustomerInfo의 유형을 지정해야합니다 : 그것은

을 필요할 때 아마

+1

"알 수없는 유형에 대해서는 여전히 오류가 발생합니다." - 포기하지 마라. 오류 메시지를 조사하고 여기에 게시하십시오! – Joe

+0

System.Runtime.Serialization.dll에 대한 참조를 추가 했습니까? – Joulukuusi

+0

@ Joulukuusi 도움이 되셨습니다. 고마워요! 곧 작동하는지 IDE가 유형을 찾는지 확인하겠습니다. [Serializable]이 동일한 네임 스페이스에 있음에도 불구하고 그 참조를 추가하지 않아서 놀랐습니다. – Kos

답변

1

C# 네임 스페이스는 여러 어셈블리에서 공유 할 수 있습니다. [DataContract] 특성을 포함하는 System.Runtime.Serialization.dll에 대한 참조를 추가해야합니다.

1

당신은 아래의 예를 살펴은 알고 Type 속성을 지정해야 누락 형식 추측

1

응용 프로그램에 wcf 서비스 템플릿을 추가하고 프로젝트에서 함수 및 데이터 멤버와 참조 wcf를 선언하기 만하면됩니다.

관련 문제