2014-04-09 2 views
0

WebAPI를 통해 반환하고 동일한 WebApi에서 만드는 개체 목록이 있습니다. 그들이 다른 클래스의 일부라면 DataContract로 간단하게 꾸밀 수 있으며 모든 것이 잘 작동합니다.직렬화 중에 목록 이름을 처리하는 모범 사례

public class ParentClass() 
{ 
    [DataContract(Name = "Children", Namespace = "http://schemas.blah.blah"] 
    public List<ChildClass> Children 
} 

목록을 직접 반환 할 때 문제가 발생합니다. 이렇게하면 DataContract 이름과 네임 스페이스가 손실됩니다.

나는 다른 클래스

[DataContract(Name = "Children", Namespace = "http://schemas.blah.blah"] 
public class ChildrenList : List<ChildClass> 
{ 
} 

를 작성하고 문제를 해결하지만, 더 많은 생성

public class ParentClass() 
{ 
    public ChildrenList Children 
} 

내 부모 클래스를 변경할 수 있습니다. 첫 번째는 내가 할 수있는 능력을 잃는다는 것입니다.

ChildrenList results = getchildrenlistfromsomemethod(); 
results = results.OrderByDescending(p => p.Rank).ToList(); 

나는 순수한 목록으로 할 수 있습니다. 또한 목록을 확장하는 것은 나쁜 습관입니다. 컬렉션에서 확장하여이 문제를 해결할 수 있지만 여전히 위의 문제가 더해져 AddRange() 메서드가 손실됩니다.

내 질문

1) 항상 특정 이름과 네임 스페이스에 직렬화 특정 유형의 목록을 만들 수있는 간단한 방법이 있나요이다?

2) 목록을 확장하는 것이 가장 좋습니다. orderby, groupby 등등을 수행하여 목록으로 변환하는 것 사이에 붙어 있습니다. foreach 루프의 새 확장 목록에 다시 항목을 추가하십시오. (비용이 많이 드는 것 같습니다)

3)이 문제를 해결하기위한 정말 쉽고 쉬운 방법을 놓쳤습니까?

답변

0

하면 배킹 필드 목록 선언 시도 : 시리얼 라이저는 공공 필드를 확인하는 것처럼

[DataContract(Name = "Children", Namespace = @"http://schemas.blah.blah"]) 
    private ChildClass _children; 

    public List<ChildClass> Children 
    { 
     get { return _children; } 
     set { _children = value } 
    } 
+0

작동하지 않을 것입니다 그. 그리고 비록 그것이 작동했다하더라도 그것은 부모 클래스 안에서 완벽 할 것입니다.하지만 제가 할 경우 ... 새로운리스트를 반환하십시오 ... 선언을 설정할 곳이 없습니다. – Oli

관련 문제