2

세션 상태 서버에 세션을 저장하고 있습니다. (inproc를 저장하면 작동하지 않습니다.)세션에서 linq-to-sql 객체 또는 대체 솔루션을 저장하십시오.

Visual Studio (2010)에 내장 된 linq-to-sql 디자이너가 생성 한 클래스를 사용하여 객체가 내 웹 사이트에 일부 데이터를 저장하고 표현하도록합니다. .

경우에 따라 이러한 개체 중 일부를 다른 웹 페이지에서 액세스 할 수 있도록 세션에 추가하려고합니다.

문제는 내가 할 때 linq-to-SQL 항목의 일부가 직렬화되지 않는다는 오류가 발생한다는 것입니다.

나는 그것이 의미하는 바에 상관없이 datacontext "serialization mode"를 "unidirectional"으로 설정했습니다.

그런 다음 linq.xelement 필드로 변환 된 일부 sql-xmldata 필드를 일부 xml이 포함 된 기본 문자열로 대체하여 직렬화가 가능한 대체 객체를 만들었습니다. 그런 다음 객체에는 기본 유형 만 포함됩니다.

아직도 오류가 있습니다.

은 그 때 나는 바이트를 얻기 위해 DataContractJsonSerializer를 사용하여 시도 [] 나는 세션에 투입 할 수있는 :

byte[] buf = null; 
var ds = new DataContractJsonSerializer(fi.GetType()); 
using (var ms = new MemoryStream()) 
{ 
    using (var w = JsonReaderWriterFactory.CreateJsonWriter(ms)) 
    { 
    ds.WriteObject(w, fi); 
    ms3.Position = 0; 
    buf = ms.ToArray(); 
    } 
} 
return buf; 

여기에서의 문제를 JSON 문자열이 일부의 중간에 끊어 질 것이다 요소이므로 나중에 비 직렬화 할 수 없습니다. XmlWriter를 사용하여 시도했을 때 어떤 이유로 약 43000 바이트의 XML 텍스트를 잘라내는 문제가있었습니다.

이것은 꽤 엉망이되고 있습니다.

더 좋은 방법이있을 것입니다.

하나의 아이디어는 단순히 임시 SQL Server 테이블에 개체를 제출하고, SQL Server 행에서 GUID를 가져오고, 개체의 전체 집합 대신 세션에 GUID를 저장 한 다음에서 데이터를 다시 읽는 것입니다. 다른 페이지의 SQL 서버.

실제로 더 효과적인 해결책은 무엇입니까?

답변

2

은 MemoryStream을 읽기 전에 JsonWriter을 씻어보십시오 :

... 
ds.WriteObject(w, fi); 
w.Flush(); 
ms3.Position = 0; 
buf = ms.ToArray(); 
... 
+0

이 내가 생각 문제를 해결 한 것이다. 감사. – tomsv

관련 문제