Сообщение Re[3]: Динамическое приведение типов от 17.08.2015 11:32
Изменено 17.08.2015 11:36 Serginio1
Здравствуйте, mitechka, Вы писали:
M>Да я смотрел в сторону NetDataContractSerializer'а, но, к сожалению, на другой стороне же необходимо приводить базовый класс к производному, тип которого заранее неизвестен, а сериалайзер не умеет конструировать объекты произвольного типа.
Для интереса сделал иерархию
И соответственно сериализация десериализация
str имеет значение
а test имеет тип MyClass1 и Поле1 = "MyClass1";
M>Да я смотрел в сторону NetDataContractSerializer'а, но, к сожалению, на другой стороне же необходимо приводить базовый класс к производному, тип которого заранее неизвестен, а сериалайзер не умеет конструировать объекты произвольного типа.
Для интереса сделал иерархию
namespace test
{
[DataContract]
public abstract class Base
{
[DataMember]
public string BaseName { get; set; }
}
[DataContract]
public class MyClass1 : Base
{
[DataMember]
public string Поле1 { get; set; }
}
И соответственно сериализация десериализация
var child = new test.MyClass1();
child.Поле1 = "MyClass1";
// here is where I went wrong before -- I used typeof(Child), with no known types to serialize
var serializer = new DataContractSerializer(typeof(object), new Type[] { typeof(test.MyClass1) });
var stream = new MemoryStream();
serializer.WriteObject(stream, child);
stream.Position = 0;
TextReader tr = new StreamReader(stream);
var str = tr.ReadToEnd();
stream.Position = 0;
serializer = new DataContractSerializer(typeof(object), new Type[] { typeof(test.MyClass1) });
object test = serializer.ReadObject(stream);
stream.Dispose();
str имеет значение
<z:anyType i:type="a:MyClass1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://schemas.datacontract.org/2004/07/test"><a:BaseName i:nil="true"/><a:Поле1>MyClass1</a:Поле1></z:anyType>
а test имеет тип MyClass1 и Поле1 = "MyClass1";
Здравствуйте, mitechka, Вы писали:
M>Да я смотрел в сторону NetDataContractSerializer'а, но, к сожалению, на другой стороне же необходимо приводить базовый класс к производному, тип которого заранее неизвестен, а сериалайзер не умеет конструировать объекты произвольного типа.
Для интереса сделал иерархию
И соответственно сериализация десериализация
str имеет значение
а test имеет тип MyClass1 и Поле1 = "MyClass1";
M>Да я смотрел в сторону NetDataContractSerializer'а, но, к сожалению, на другой стороне же необходимо приводить базовый класс к производному, тип которого заранее неизвестен, а сериалайзер не умеет конструировать объекты произвольного типа.
Для интереса сделал иерархию
namespace test
{
[DataContract]
public abstract class Base
{
[DataMember]
public string BaseName { get; set; }
}
[DataContract]
public class MyClass1 : Base
{
[DataMember]
public string Поле1 { get; set; }
}
И соответственно сериализация десериализация
var child = new test.MyClass1();
child.Поле1 = "MyClass1";
// here is where I went wrong before -- I used typeof(Child), with no known types to serialize
var serializer = new DataContractSerializer(typeof(object), new Type[] { typeof(test.MyClass1) });
var stream = new MemoryStream();
serializer.WriteObject(stream, child);
stream.Position = 0;
TextReader tr = new StreamReader(stream);
var str = tr.ReadToEnd();
stream.Position = 0;
serializer = new DataContractSerializer(typeof(object), new Type[] { typeof(test.MyClass1) });
object test = serializer.ReadObject(stream);
stream.Dispose();
str имеет значение
<z:anyType i:type="a:MyClass1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:a="http://schemas.datacontract.org/2004/07/test">
<a:BaseName i:nil="true"/><a:Поле1>MyClass1</a:Поле1>
</z:anyType>
а test имеет тип MyClass1 и Поле1 = "MyClass1";