2017-12-10 3 views
0

다른 클래스가 직렬화 가능합니다.C에서 동일한 메소드로 다른 클래스 직렬화

나는 다음과 같습니다 그렇게 할 수있는 방법이 :이 기능을 사용할 수 있습니다,하지만 난 ClassName2라는 이름의 두 번째 클래스에 사용 cannto ClassName1를 직렬화하기 위해

public void Serialize(List<ClassName1> CT, string Address) 
{ 
    ... 
    XmlSerializer serializer = new XmlSerializer(typeof(List<ClassName1>)); 
    ... 
} 

. 클래스는 다르지만 둘 다 직렬화 가능합니다.

이제 메소드를 복사하여 붙여 넣을 수 있고 클래스를 변경해도되지만 메소드와 유일한 차이점은 이름이므로 바보라고 생각합니다. 내가 모든 C#을의 "개체"입니다 생각 때문에

public void Serialize(List<object> CT, string Address) 
{ 
    ... 
    XmlSerializer serializer = new XmlSerializer(typeof(List<object>)); 
    ... 
} 

하지만 난 그것을 사용할 때 나는 "변환 할 수 없습니다"오류가 발생합니다 :

나는 이런 식으로 작업을 수행하려고 노력했다.

xml.Serialize(listNumber, Address); 

나는이 제네릭으로 해결 될 수있는 느낌이,하지만 난 그래서 난 그것을 작동하는 경우는 어떻게 전혀 생각이 어떤 종류의 일반적인와 함께 일하지 않는다.

+0

정적 메서드를 사용하여 정적 클래스를 만들 수 있습니다. 예 : 'public static void SerializeDynamicClass (this T clsObject) 여기서 T : class { "여기에 XmlSerializer 코드를 수행하십시오" – MethodMan

답변

1

이 제네릭의 이상적인 사용은 다음과 같습니다

public void Serialize<T>(List<T> CT, string Address) 
{ 
    ... 
    XmlSerializer serializer = new XmlSerializer(typeof(List<T>)); 
    ... 
} 

하고 심지어 호출하는 코드를 변경할 필요가 없습니다 것입니다 대부분의 경우

- 컴파일러가 자동으로 제네릭 형식 인수를 추론됩니다.

0

XmlSerializerSerialize 메서드는 개체를 serialize 할 때 object 매개 변수가 있으므로 동일한 작업을 수행하십시오.

public void Serialize(object obj, string Address) 
{ 
    ... 
    XmlSerializer serializer = new XmlSerializer(obj.GetType()); 
    ... 
} 

목록에서 다른 방법을 사용하지 않으면 제네릭 사용에 이점이없는 것처럼 보입니다. 이 경우 Marc Gravell의 접근 방식을 사용하십시오.

관련 문제