2014-07-17 2 views
0

나는, 그러나 데이터베이스 공간을 절약하기 위해, 나는 모든 중요하지 않은 정보를 제거 XML로 내 WCF 요청과 응답을에는 직렬화 :XML에서 네임 스페이스가 제거 된 경우 XML을 DataContract로 deserialize하려면 어떻게해야합니까? 결과가 있도록

<someObject> 
    <someValue>10</someValue> 
</someObject> 

더 복잡한 중첩 된 속성은 위의 단지이다,있다 예.

내가 deserialise하려고

, 나는 someObject, ''

byte[] data = System.Text.Encoding.UTF8.GetBytes(xmlString); 
stream.Write(data, 0, data.Length); 
stream.Position = 0; 
DataContractSerializer deserializer = new DataContractSerializer(typeof(T)); 
return deserializer.ReadObject(stream) as T; 

이 문제를 해결하는 쉬운 방법이 있나요 오류가 someObject, someNamespace를 기대 말을 얻을 수 있지만, 발견? 아마도 DataContractSerializer을 사용하지 않으셨습니까?

+0

DataContractSerializer에 대한 설명서를 보면 xmlroot 및 네임 스페이스를 지정할 수있는 버전의 생성자가 있습니다. 이것이 당신이 필요로하는 것을합니까? [DataContractSerializer 생성자 (형식, 문자열, 문자열)] (http://msdn.microsoft.com/en-us/library/ms404902(v=vs.110).aspx) – ben

답변

0

나는이 게시물이 거의 일주일이라는 것을 알고 있지만 이미 해결책을 찾은 사람을 도울 수 있습니다.

미리 구조를 알고있는 경우 XmlSerializer 클래스를 사용할 수 있습니다.

string xml = "<someObject>" + 
      " <someValue>10</someValue>" + 
      "</someObject>"; 

using (TextReader reader = new StringReader(xml)) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(someObject)); 
    var obj = serializer.Deserialize(reader); 

} 

여기에 직렬화하기 위해 지원 클래스의 : 더 복잡한 XML의

[Serializable()] 
public class someObject 
{ 
    [XmlElement("someValue")] 
    public string someValue { get; set; } 
} 

, 당신은 당신이 사용하고있는 클래스를 수정해야 할 것이다. 클래스를 중첩하거나 배열/목록을 지원할 수 있습니다.

+0

건배, 나는 이것을 시도했지만 생각 'XmlSerializer'는'Dictionary'를 지원하지 않습니다. 그리고 나는 어떤 메타 정보없이 특정 타입을 deserialize하려고 노력하고 있습니다. – NibblyPig

+0

글쎄, List 를 사용하여 문제를 해결할 수 있습니다. 사전이 정말로 필요한 경우 목록에서 쉽게 다시 구성 할 수 있습니다. 또는 다음 클래스를 사용해보세요. http://weblogs.asp.net/pwelter34/444961 – Cory