Sorry - this should have been sent for the 'ref' arguments. I relied on this problem and did not think. The answer is that the ModifiedSerialized function must accept the ref argument to directly change the "target".
ModifySerialized (ref Target DataClass) {...}
Given this runtime.serializable class:
[DataContract]
public class DataClass
{
[DataMember(Order = 0)]
public int Number
{
get;
set;
}
[DataMember(Order = 1)]
public string Name
{
get;
set;
}
override public string ToString()
{
return "DataClass: " + Name + " -- " + Number;
}
}
and some classes of exercises:
class Test
{
public Test()
{
DataClass testDataClass = new DataClass() { Name = "Foo", Number = 123 };
ModifySerialized(testDataClass);
Console.WriteLine(testDataClass);
}
private void ModifySerialized(DataClass target)
{
MemoryStream stream = new MemoryStream();
DataContractSerializer serializer = new DataContractSerializer(typeof(DataClass));
serializer.WriteObject(stream, new DataClass() { Name = "serialized", Number = 777 });
stream.Seek(0, SeekOrigin.Begin);
string sDebug = ASCIIEncoding.ASCII.GetString(stream.GetBuffer());
Console.WriteLine(sDebug);
target = (DataClass)serializer.ReadObject(stream);
Console.WriteLine(target);
}
}
I expect console output from inside the test ctr, after the call there ModifySerialized(target)will be something like:
DataClass: name = serialized -- number = 777
But instead, the output after the call ModifySerialized(target)still shows
DataClass: name Foo number 123 (or similar)
-> (DataClass) The target does not change
ModifySerialized - , "target" (.. serialized, 777).
? , ? , ? , ModifySerialized(target) Number=1234, , .
...