Я хочу сериализовать с использованием protobuf-net для строкового преобразования и десериализации обратно в объект.Он работает нормально, если я сериализую в файл, подобный .bin. Однако приведенный ниже код вызывает исключение при десериализации.Есть идеи?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using ProtoBuf;
namespace Proto
{
class Program
{
public long MemUsed = 0;
NetDataContractSerializer ser = new NetDataContractSerializer();
static void Main(string[] args)
{
var person = new Person {
Id = 12345, Name = "Fred",
Address = new Address
{
Line1 = "Flat 1",
Line2 = "The Meadows"
}
};
Console.WriteLine("Serializing .....");
var result = Serialize<Person>(person);
Console.WriteLine(" Serialization Complete .....");
Console.WriteLine("Press key to Deserialize ....");
Console.ReadKey();
var person2 = new Person();
DeSerialize<Person>(ref person2,result);
Console.WriteLine(person2.Name);
Console.ReadLine();
}
public static string Serialize<T>(T myObj)
{
string retVal = "";
using (MemoryStream memStream = new MemoryStream())
{
Serializer.Serialize<T>(memStream, myObj);
memStream.Position = 0;
retVal = new StreamReader(memStream).ReadToEnd();
}
return (retVal);
}
public static void DeSerialize<T>(ref T myObj, string xmlString)
{
byte[] byteArray = Encoding.ASCII.GetBytes(xmlString);
MemoryStream stream = new MemoryStream(byteArray,0,byteArray.Length);
stream.Capacity = Convert.ToInt32(stream.Length);
myObj = Serializer.Deserialize<T>(stream);
stream.Close();
}
}
[ProtoContract]
class Person {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Name { get; set; }
[ProtoMember(3)]
public Address Address {get;set;}
}
[ProtoContract]
class Address {
[ProtoMember(1)]
public string Line1 {get;set;}
[ProtoMember(2)]
public string Line2 {get;set;}
}
}