1
.NET serialization 항목을 파악하고 문제가 발생했습니다. 나는 그것을 테스트하기위한 간단한 프로그램을 만들었고 속성을 사용하는 데 어려움을 겪었다. 코드는 다음과 같습니다.SoapIgnore 특성을 적용해도 serialization 결과에 아무런 영향을 미치지 않습니다.
[Serializable]
public class SampleClass
{
[SoapIgnore]
public Guid InstanceId
{
get;
set;
}
}
class Program
{
static void Main()
{
SampleClass cl = new SampleClass { InstanceId = Guid.NewGuid() };
SoapFormatter fm = new SoapFormatter();
using (FileStream stream = new FileStream(string.Format("C:\\Temp\\{0}.inv", Guid.NewGuid().ToString().Replace("-", "")), FileMode.Create))
{
fm.Serialize(stream, cl);
}
}
}
문제는 직렬화가 수행되는 동안 InstanceId가 무시되지 않는다는 것입니다. SoapIgnore 속성이 적용되기 때문에
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:SampleClass id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/TestConsoleApp/TestConsoleApp%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<_x003C_InstanceId_x003E_k__BackingField>
<_a>769807168</_a>
<_b>27055</_b>
<_c>16408</_c>
<_d>141</_d>
<_e>210</_e>
<_f>171</_f>
<_g>30</_g>
<_h>252</_h>
<_i>196</_i>
<_j>246</_j>
<_k>159</_k>
</_x003C_InstanceId_x003E_k__BackingField>
</a1:SampleClass>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
나는 문서에서 InstanceID 속성에서 이해할 수 있듯이
직렬화 할 예정되지 않은 : 내가 .inv 파일에 도착하면이 같은 것입니다. 내가 놓친 게 있니?