문제

3-4 방법으로 클래스 객체를 직렬화하는 일반적인 코드가 있으므로 해당 코드에 대한 공통 함수를 만들고 모든 방법에서 호출 함수를 만들고자합니다.

나는 다음 코드에서 이것을하고있다

DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

                json = Encoding.Default.GetString(ms.ToArray());

                ms.Close();

이 공통 코드를 JSON 문자열을 반환하고 전체 클래스를 JSON 객체로 변환 할 때 전체 클래스를 입력 매개 변수로 받아들이는 SEPRATE GENERAL 함수에 넣고 싶습니다.

공개 문자열 생성 jsonstring (클래스 C1)

그러나 이것은 키워드 "클래스"에 오류가 발생하여 유형이 필요하다고 말합니다.

누구든지 Seprate 방법이나 기능에서 전체 클래스 객체를 어떻게 받아 들일 수 있는지 말해 줄 수 있습니까?

도움이 되었습니까?

해결책

당신은 "클래스"를 "객체"와 혼동하고 있습니다. 특정 클래스의 인스턴스 인 객체를 직렬화합니다 (일명 "유형").

모든 객체 "Object"에 대해 .NET 기본 유형의 매개 변수를 취하는 메소드를 작성할 수 있습니다.

public static string GenerateJsonString(object o) 
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        ser.WriteObject(ms, o);
        json = Encoding.Default.GetString(ms.ToArray());
        ms.Close();
        return json;
    }
}

다른 팁

매개 변수를 "개체"로 입력하십시오. 클래스를 매개 변수로 전달할 수 없으며 클래스의 인스턴스 만 OOP에서 "객체"라고합니다.

public string GenerateJsonString(object obj)

이 방법에 전달하는 모든 객체가 공통 기본 클래스에서 파생되는 클래스의 인스턴스 인 경우, 다형성을 사용하고 기본 클래스의 인스턴스 인 객체를 수락하기 위해 방법을 작성할 수 있습니다. 그렇지 않으면 모든 클래스는 파생됩니다 System.Object.

"클래스 객체"가 의미하는 바는 확실하지 않습니다. 객체를 의미한다면, 객체에 대한 참조를 정상적으로 전달하면 "전체 객체"(음, 참조)가 통과됩니다. 당신은 모든 회원을 얻을 수 있습니다.

당신이 통과하고 싶다면 유형 그 자체로, 당신은 매개 변수를 다음과 같이 선언해야합니다 유형 - 그러나 나는 그것이 당신이 실제로 원하는 것이 아니라고 생각합니다.

객체를 수락하는 메소드를 작성하려면 매개 변수를 유형으로 선언하십시오. 물체:

public string GenerateJsonString(object x)

개인적으로 나는 사용하지 않을 것입니다 Encoding.Default (시스템 별) 이진을 텍스트로 변환하려면 - 세일 라이저가 실제로 사용하는 인코딩은 무엇입니까? 스트림 대신 TextWriter (예 : StringWriter)를 전달할 수 있습니까?

당신은 물체를 받아 들일 수 있습니다. 클래스는 인스턴스화되지 않으며 그 방법으로 전달할 수 없습니다.

클래스 대신 유형을 사용해보십시오

public string GenerateJsonString(Type t1)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top