나는 내 자신의 시리얼 라이저를 작성하려고한다. 그러나이 serializer는 속성 만 serialize합니다. 필드 직렬화하는 방법?필드를 직렬화하는 방법은 무엇입니까?
namespace MySerializer
{
class MySerializer
{
private Type targetType;
public MySerializer(Type targetType)
{
this.targetType = targetType;
if (!targetType.IsDefined(typeof(DataContractAttribute), false))
throw new Exception("No soup for you");
}
public void WriteObject(Stream stream, Object graph)
{
IEnumerable<PropertyInfo> serializbleProperties =
targetType.GetProperties().Where(p => p.IsDefined(typeof (DataMemberAttribute), false));
var writer = new StreamWriter(stream);
writer.WriteLine("<" + targetType.Name + ">");
foreach (PropertyInfo propInfo in serializbleProperties)
writer.Write("\t<" + propInfo.Name + ">" + propInfo.GetValue(graph, null) +
"</" + propInfo.Name + ">");
writer.WriteLine("</" + targetType.Name + ">");
writer.Flush();
}
}
}
[DataContract]
class Person
{
[DataMember]
public string _family;
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person name = new Person
{
_family = "big",
FirstName = "Vasy",
LastName = "Bobrow",
Age = 20
};
MySerializer serializer = new MySerializer(name.GetType());
MemoryStream someRam = new MemoryStream();
serializer.WriteObject(someRam, name);
someRam.Seek(0, SeekOrigin.Begin);
Console.WriteLine(XElement.Parse(
Encoding.ASCII.GetString(someRam.GetBuffer()).Replace("\0", "")));
}
}
내가 FieldsInfo 대신 PropetryInfo를 사용할 수있는 필드를 직렬화 또는 다른 방법이 : 나는이 수업은 다음과 같습니다?
우선, 왜 자신의 시리얼 라이저를 쓰고 있습니까? 호기심에서 벗어나거나 다른 목적이 있습니까? – ppetrov
Type.GetFields에 대해 뭔가를 MSDN 확인하십시오. –
내가 궁금해서 제 serializer를 쓰고 있습니다. 나는 다른 목적이 없다. 필드의 직렬화 프로젝트를 추가하는 방법을 알고 싶습니다. – Vlad