문제

나는 꽤 상당 개체 그래프는 직렬화를 통해 파일을되며 데이터 계약으로 매핑됩.나는 지금은 현재의 목록은 이러한 파일을 사용자에서 선택할 수 있다.이 목록에서 원하는 파일에 대한 세부 사항이 있는 속성의 루트 개체입니다.나는 원하지 않을 로드하는 전체 그래프 메모리로부터 나에만 관심을 표시하는 루트 노드의 속성을.

누군가는 방법을 알고 있어""깊이의 직렬화할 수 있도록 그냥 뽑아 루트 파일에서 개체에 건너 통해 아이들은?오히려를 처리하지 마십시오 파일로 원 XML,이후 하고 있지는 않는 모든 원 XML 조작,다른 곳에서와는 것 하나 더 가지는 코드가 동기화합니다.

나의 유일한 아이디어 지금을 만들기 호환되는"요약"개체만을 포함하는 특성에 관심이 있어요,그리고 아무도 어린이들,강으로 파일을니다.이동해야는 아이들지 않기 때문에 관련된 요약 개체입니다.

Is there a better way to accomplish this?

업데이트/설명:특성은 응답이 내가 찾고 있습니다.에 대한 한 가지는,그들은 것을 방지"추가"속성에서 끝나는 파일에 있을 때 물체가 처음은 다음과 같습니다.

둘째,그들은 더 영구적인 것보다 나가고자 노력하고 있습니다.결국,를 직렬화는 전체 파일에 현재는 지원되지 않습니다.나에게 보여주기 위해 노력 요약하는 파일의 목록을 사용자에서 선택입니다.가져오는 동안 내가 필요 모든 아이들과 손자입니다.그것은 단지 과 동안 단계 1.이러한 잠재적으로 큰 파일은,그래서 완전히 deserialize 의 여러 가지 그들을 그냥 그렇게 나를 표시할 수 있는 헤더에 정보를 하려고 하지 않습니다.

희망이 모든 혼란이트에 대한 질문입니다.

도움이 되었습니까?

해결책

이는 거의 당신이 원하는 방식 그것을 할 수 있습니다.의되며 데이터 계약으로 매핑됩은 의미로 이런 상황을 처리할 수 있도록,당신은 종류는 개념적으로,동일 하지만 다른 형태에서 CLR 의 관점하려는 직렬화됩니다.

어는 개체를 만들과 유사한 하위 집합의 속성이 원하는 직렬화하고 전달하는 유형을되며 데이터 계약으로 매핑됩.

는지 확인에"요약"종류는 당신의 속성을 설정 DataContract 특성(뿐만 아니라 어떤 DataMember 특성 또는 DataContract 특성에는 어린이들의 노출)특별히 이름을 네임스페이스 속성과 이름을 반영하고 네임스페이스의 유형 요약(이후 이러한 일치해야 합니다).

다른 팁

내가 첫째로 권고하는 것을 수행합 XML 조작하려는 경우에는 꺼내에서 일부 세부 사항 루트 노드입니다.또 다른 가능하지만 성능이 영향을 사용하여 버전의 기능을되며 데이터 계약으로 매핑됩을 위해 이 문제를 해결합니다.데이터에 대한 계약,마크는 모든 분야는 사람을 제외하고 당신이 필요합니다 요약에서 선택적으로.그런 다음 데이터를 복사의 계약으로 다른 클래스를 떠나는 추가 필드가 있습니다.직렬화하는 새로운,작은 데이터를 계약입니다.

class Program
{
    static void Main(string[] args)
    {
        Person a = new Person();
        Person b = new Person();
        a.Name = "Mike";
        b.Name = "Joe";
        b.Parent = a;

        DataContractSerializer dtc = new DataContractSerializer(typeof(Person));

        StringBuilder sb = new StringBuilder();
        using (XmlWriter xr = XmlWriter.Create(sb))
        {
            dtc.WriteObject(xr, b);
        }

        object n;

        DataContractSerializer dtc2 = new DataContractSerializer(typeof(TinyPerson));

        using (XmlReader xr = XmlReader.Create(new StringReader(sb.ToString())))
        {
            n = dtc2.ReadObject(xr);
        }

    }
}

[DataContract(Name="Person")]
public class Person
{
    [DataMember]
    public string Name;

    [DataMember(IsRequired=false)]
    public Person Parent; 
}


[DataContract(Name = "Person")]
public class TinyPerson
{
    [DataMember]
    public string Name;

}

을 제어할 수 있습의 직렬화를 사용하여 특성이 있습니다.자세히보기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top