2013-09-03 3 views
0

그래서 나는 다음과 같습니다 XML을 가지고불가능? DataContractSerializer를 사용하여이를 deserialize하는 방법?

내가 DataContractSerializerdo 것을 사용 WP7에이 직렬화하는
<a> 
    <b c="1" ></b> 
    <b c="2" ></b> 
    <b c="3" ></b> 
    <b c="4" ></b> 
</a> 

.

이 태그를 추가 태그에 넣으면 루트 수준에서 <> a를 누르는 것과 같은 몇 가지 트릭 없이는 불가능하다는 의견이 몇 가지 있습니다.
사실입니까? 귀하의 요청에 따라

나는 몇 가지 코드를

클래스를 추가 해요 :

[KnownType(typeof(B))] 
[DataContract(Namespace = "")] 
public class A:List<B> 
{ 
    [DataMember] 
    public List<B> B 
    { 
     List<B> _b = new List<B>(); 
     get { return _b; } 
     set { _b = value; } 
    } 
} 

[DataContract(Namespace = "")] 
public class B 
{ 
    [DataMember] 
    public string c = "foo"; 
} 

Deserialisation :

var serializer = new DataContractSerializer(typeof(A)); 
var o = serializer.ReadObject(SomeResponseStream); 

그리고이 많은, 다른 많은 변형. 그런데
- 클래스의 배열은 다음과 같이 XML로 직렬화됩니다 <의

<a> 
    <b> 
     <b c="1" ></b> 
     <b c="2" ></b> 
     <b c="3" ></b> 
     <b c="4" ></b> 
    </b> 
</a> 

공지 사항 추가, 원치 않는 수준이 B

+3

: http://stackoverflow.com/questions/591907/how-can-you-control-net-datacontract-serialization-so-it-uses-xml -attributes-in LINQ to XML을 대신 사용해보십시오. – MarcinJuraszek

+0

@ I4V Windows Phone 7에서는 사용할 수 없다고 생각합니다. –

+0

@HighCore : 사용할 수 있습니다. http://stackoverflow.com/questions/5119312/windows-phone-7-and-system-xml-linq-library – NotMe

답변

1

으로 댓글 말했다>, Linq2Xml가 더 나은 방법이 될 수있다 go

string xml = @" 
<a> 
    <b> 
     <b c=""1"" ></b> 
     <b c=""2"" ></b> 
     <b c=""3"" ></b> 
     <b c=""4"" ></b> 
    </b> 
</a>"; 

var bs = XDocument.Parse(xml) 
        .Root 
        .Element("b") 
        .Elements("b") 
        .Select(b => new B { c = b.Attribute("c").Value }) 
        .ToList(); 

public class B 
{ 
    public string c = "foo"; 
} 
당신은 DataContractSerializer``와 속성을 사용할 수 없습니다
관련 문제