2012-08-30 2 views
0

Im는 PHP 스크립트의 출력에서 ​​XML 데이터를 가져옵니다. 그것이 작동하는 방식은 PHP 스크립트가 HTML 페이지에 XML 데이터를 출력하고 사용하는 API가 해당 페이지에 표시된 모든 텍스트 데이터를 문자열로 가져 오는 것입니다.문자열을 비 직렬화 할 때의 문제 C#

그래서 html/php의 출력은 꽤 표준적인 xml 형식이어야한다고 생각합니다. 필자는 그것을 연구하고 PHP가 가장 작은 세부 사항이 정확하게 출력되는지 확인했습니다.

그럼 다음 코드를 사용하여 문자열을 내 클래스로 역 직렬화합니다.

public static object XmlDeserializeFromFile(Type type, string strPath) 
{ 
    object data; 

    try 
    { 
     using (StreamReader reader = new StreamReader(strPath)) 
     { 
      XmlSerializer serializer = new XmlSerializer(type); 
      data = serializer.Deserialize(reader); 
      reader.Close(); 
     } 
    } 
    catch(Exception exception) 
    { 
     Debug.LogError (exception); 
     data = type.GetConstructor(Type.EmptyTypes).Invoke(null); 
    } 

    return data; 
} 

그래서 문제는 문자열이 예외를 발생시키지 않고 코드에서 파싱된다는 것입니다. 그러나 클래스는 여전히 Null 값을 반환합니다. 필자는 또한 디버거에 전체 XML 컨텐트를 표시하기 때문에 문자열이 올바르게 수집되고 있는지 확인했습니다.

다음 코드를 사용하여 클래스 Im을 테스트하려면.

MyClass member = (MyClass)XmlDeserializeFromFile(typeof(MyClass), MyString); 
    if(member != null) 
    { 
     Debug.Log(member.a); 
    } 
    else 
    { 
     Debug.Log("Not Loaded"); 
    } 

내 디버거의 결과는 member.a = null을 계속 표시합니다.

내 수업 속성이 모두 공개되어 {get; set;;} 그리고 xml을 정확히 일치 시키면 문자열 대신 파일에서로드하면 클래스 값이 올바르게 채워집니다.

답변

1

xmlSerializer에서 사용할 수있는 이벤트를 살펴보십시오. UnknownAttribute, UnknownElement, UnknownNode, UnreferencedObject. 이벤트가 발생하면 이벤트를 처리하도록 이벤트 처리기를 설정하십시오. 이러한 이벤트에서 나오는 데이터는 왜 데이터가 개체에 나타나지 않는지에 대한 올바른 방향으로 인도해야합니다.

+0

문제는 결국 매우 어리 석고 끝났지 만, 당신의 충고는 즉시 나에게 도움이되었습니다. 감사! – MichaelTaylor3D

관련 문제