这不是序列化,而是转换。如果你真的想要它可转换,那就让它可转换。
实现 TypeConverter。
示例代码
using System;
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Text;
使用 System.IO;
使用 System.Xml.Linq;
使用 System.Diagnostics;
使用 System.Xml.Serialization;
使用 System.ComponentModel;
使用 System.Globalization;
命名空间 ConsoleApplication1
{
internal class MemberConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context,
Type sourceType)
{
if (sourceType == typeof(Dictionary<string, object>))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
if (value is Dictionary<string, object>)
{
Member member = new Member();
Dictionary<string, object> d = (Dictionary<string, object>)value;
if (d.ContainsKey("fName")) { member.fName = Convert.ToString(d["fName"]); };
if (d.ContainsKey("lName")) { member.lName = Convert.ToString(d["lName"]); };
if (d.ContainsKey("email")) { member.email = Convert.ToString(d["email"]); };
return member;
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(Dictionary<string, object>))
{
Member member = (Member)value;
Dictionary<string, object> d = new Dictionary<string, object>();
d.Add("fName", member.fName);
d.Add("lName", member.lName);
d.Add("email", member.email);
return d;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
[TypeConverter(typeof(MemberConverter))]
internal class Member
{
public string fName;
public string lName;
public string email;
}
class Program
{
static void Main(string[] args)
{
var d = new Dictionary<string, object> {
{"fName", "John"},
{"lName", "Doe"},
{"email", "john@doe.net"}
};
Member m = (Member)TypeDescriptor.GetConverter(typeof(Member)).ConvertFrom(d);
Debugger.Break();
}
}
}
Member member = (Member)myDictionary;
。 - Maksim Vi.Member
构造函数中。添加到答案中... - µBioMember
类只是一个示例。 - Maksim Vi.