2013-08-27 1 views
0

이 코드는 아마도 중복 된 것 같지만 찾고있는 정확한 대답을 찾을 수 없습니다. 어떤 객체에 IXmlSerializable을 구현하고 있는데 linq-to-xml을 사용할 수 있는지 알고 싶습니다. LINQ to XML을 사용하여 IXmlSerializable을 구현하십시오.

이 교체

...이와

public void WriteXml(XmlWriter writer) 
{ 
    writer.WriteElementString("Name", _name); 
    writer.WriteElementString("X", _x.ToString()); 
    writer.WriteElementString("Y", _y.ToString()); 
} 

...

public void WriteXml(XmlWriter writer) 
{ 
    XElement element = 
     new XElement("MyObj", 
      new XElement("Name", _name), 
      new Xelement("X", _x), 
      new Xelement("Y", _y) 
     ); 

    element.WriteTo(writer); 
} 

내 실제 구현은 분명히 내가 LINQ - 투 - XML ​​ 구조를 느끼는 점에 더 복잡 더 간단하고 읽기 쉽습니다. 위의 조건을 수용 할 수 있습니까?

+0

예, 그렇습니다. 'XmlWriter' 인스턴스에 적절한 내용을 생성하는 한 구현이 정확합니다. – MarcinJuraszek

+0

나는 이것이 "linq-to-xml"이라고 생각하지 않는다. 이것은 XML 파일을 만드는 또 다른 방법 일뿐입니다. –

+0

@Andrew Ahh 예. 내 예제는 너무 단순화되었습니다. 내 구현 실제로 일부 열거 형 멤버를 통해 linq 쿼리를 포함합니다. –

답변

2

첫 번째 구현에서는 두 번째와 동일한 XML을 생성하지 않습니다. 게다가

public void WriteXml(XmlWriter writer) 
{ 
    new XElement("Name", _name).WriteTo(writer); 
    new XElement("X", _x).WriteTo(writer); 
    new XElement("Y", _y).WriteTo(writer); 
} 

이 아닌 XML 호환 잘못된에 취약 할 수

writer.WriteElementString("X", _x.ToString()); 

결과를 호출 할 때 : 첫 번째에 의해 생성 된 XML에 맞게 다음과 같이 당신은 두 번째 구현을 작성해야 _x 유형 (예 : _x 유형이 DateTime 인 경우)에 따라 파싱되므로 두 번째 구현이 적어도 이와 관련하여 더 좋습니다.

나는 C# 5에서이 정보 중 일부를 간단하게 가져 왔습니다.

관련 문제