2016-09-12 4 views
0

클래스 멤버 중 하나가 Interface이기 때문에 XML serializable이 아닌 공급 업체의 DLL에서 클래스를 사용하고 있습니다.serialize 할 수없는 공급 업체 클래스 serialize 가능

그러나 클래스의 인스턴스를 serialize해야합니다.

인터페이스를 무시하고 다른 모든 항목을 직렬화하도록 XmlSerializer에 어떻게 지시 할 수 있습니까?

+1

나는 [Json.Net] (https://json.codeplex.com/)을 시도 할 것이다. –

+0

@ LB의 코멘트를 조금 확장하면 Json.NET은 [JSON을 XML로 변환 할 수있다] (http : // www.newtonsoft.com/json/help/html/ConvertingJSON 및 XML.htm) json으로 직렬화 한 다음 XML로 변환 할 수 있습니다. – dbc

+1

그렇지 않으면 [원래 클래스를 변경하지 않고 직렬화하는 동안 일부 속성 제외] (http://stackoverflow.com/questions/9377414)를 참조하십시오. 그러나 [StreamReader 및 XmlSerializer를 사용하여 메모리 누수] (https://stackoverflow.com/questions/23897145)를 기록하십시오. 직렬 변환기는 한 번만 구성한 다음 캐시해야합니다. – dbc

답변

0

당신은이 일을 할 수있다 :

1) 다음 직렬화, 당신의 공급 업체 클래스로 채우, 당신이 원하는 모든 것을 가진 클래스를 만듭니다.

확인 adapter design pattern

2) 사용 Json.Net. 일단 메타 데이터가있는 IPagedList를 serialize해야하고이 작업을 수행했습니다.

public static string SerializePagedList(IPagedList<T> pagedList) 
    { 
     string result = JsonConvert.SerializeObject(
      // new anonymous class with everything I wanted 
      new 
      { 
       Items = pagedList, 
       MetaData = pagedList.GetMetaData() 
      }, 
      new JsonSerializerSettings 
      { 
       NullValueHandling = NullValueHandling.Ignore, 
       ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
      }); 
     return result; 
    } 

이 정보가 도움이되기를 바랍니다.