모든 데이터 계약 오브젝트는 정규화 된 데이터 계약 이름으로 식별됩니다. Data Contract Names에서 설명하고있는 바와 같이 : 데이터 계약 명명에 관한
기본 규칙은 다음과 같습니다
- 정규화 된 데이터 계약 이름은 네임 스페이스와 이름으로 구성되어 있습니다.
- 데이터 멤버에는 이름 만 있지만 네임 스페이스는 없습니다.
- 데이터 계약을 처리 할 때 WCF 인프라는 네임 스페이스와 데이터 계약 및 데이터 멤버의 이름 모두에 대해 대/소문자를 구분합니다.
데이터 계약 네임 스페이스는 URI (Uniform Resource Identifier) 형태를 취합니다. URI는 절대적이거나 상대적 일 수 있습니다. 기본적으로 특정 형식에 대한 데이터 계약에는 해당 형식의 CLR (공용 언어 런타임) 네임 스페이스에서 제공되는 네임 스페이스가 할당됩니다.
기본적으로 Clr.Namespace 형식의 모든 CLR 네임 스페이스는 네임 스페이스 "http://schemas.datacontract.org/2004/07/Clr.Namespace"에 매핑됩니다. 이 기본값을 무시하려면 ContractNamespaceAttribute
특성을 전체 모듈 또는 어셈블리에 적용하십시오. 또는 각 유형에 대한 데이터 계약 네임 스페이스를 제어하려면 속성을 DataContractAttribute
으로 설정합니다.
그리고 Data Contract Equivalence에
는 : 데이터 계약이 동등하다고
를 들어, 그들은 같은 네임 스페이스와 이름이 있어야합니다. 또한 한쪽에있는 각 데이터 멤버에는 다른쪽에 동일한 데이터 멤버가 있어야합니다.
따라서 데이터 계약 개체를 유선으로 보내려면 정규화 된 데이터 계약 이름이 양 끝에서 일치해야합니다. 위에서 언급 한 바와 같이, 기본 데이터 계약 네임 스페이스는 http://schemas.datacontract.org/2004/07/Clr.Namespace
,하지만 당신은 아마 예를 들어, 어떻게 든 조직을 반영하기 위해이를 변경하는 것이 좋습니다 :
[DataContract(Namespace = "http://schemas.MyOrganization.com/v1")]
public class TestModel
{
[DataMember]
public string Value { get; set; }
}
아니면 전체 조립 및 닷넷 네임 스페이스를 설정할 수 있습니다 :
[assembly: ContractNamespace("http://schemas.MyOrganization.com/v1", ClrNamespace = "YourMvcApp.YourNameSpace")]
데이터 계약 직렬화 JSON과 XML을 모두 사용할 수 있습니다, 그래서 어떻게 어떻게 DataContractSerializer
은에서와 XML로 데이터 계약 이름을지도 않습니다합니까?너무 URI XML 요소 로컬 이름과 네임 스페이스를 사용 않습니다
이
<TestModel xmlns="http://schemas.datacontract.org/2004/07/YourMvcApp.YourNameSpace">
xmlns="http://schemas.datacontract.org/2004/07/YourMvcApp.YourNameSpace"
속성은 로컬 이름 TestModel
를 가진 요소의 default XML namespace declaration입니다. 로컬 이름 공간과 함께 소자의 expanded name 포함한다. XML 요소 이름은 네임 스페이스 URI 및 로컬 이름 일치, 그래서 마이크로 소프트는 XML 요소 로컬 이름에 데이터 계약 이름을 일치하도록 선택한 경우 동일한 것으로 간주, 심지어 을 변경하는 이유는 XML 네임 스페이스 URI에 데이터 계약 네임 스페이스된다 URI를 연도 또는 월이 실패 할 직렬화됩니다.
따라서 네임 스페이스를 변경하려면 클라이언트 측에서 네임 스페이스를 업데이트해야하므로 데이터 계약 웹 API 또는 WCF 서비스를 원격 설치하기 전에 네임 스페이스를 선택해야합니다. (예, here 또는 here에 대한 설명으로 물론, WCF를 들어, 클라이언트는 일반적으로 스키마 메타 데이터에서 클라이언트를 자동으로 생성됩니다.)