因为它不可能在 dotnet 中序列化字典。我的解决方案是这样的:
输出:
**<Person>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
<Attributes>
<PhoneNumber>12345</PhoneNumber>
<StreetName>StackOverFlow Street</StreetName>
<StreetNumber>51</StreetNumber>
</Attributes>
</Person>**
核心代码
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Dictionary<string, string> Attributes { get; set; }
}
public class DictionarySerializer
{
private StringBuilder _sBuilder;
private XmlWriterSettings _writerSettings;
private XmlWriter w;
public string WriteXml(Person personObject)
{
_sBuilder = new StringBuilder();
_writerSettings = new XmlWriterSettings();
_writerSettings.Indent = true;
_writerSettings.OmitXmlDeclaration = true;
w = XmlWriter.Create(_sBuilder, _writerSettings);
//if you remove person properties any dictionary can be turned into XML.
w.WriteStartElement("Person");
w.WriteElementString("FirstName", personObject.FirstName);
w.WriteElementString("LastName", personObject.LastName);
w.WriteStartElement("Attributes");
foreach (var item in personObject.Attributes)
{
w.WriteElementString(item.Key, item.Value);
}
w.WriteEndElement();
w.WriteEndElement();
w.Close();
return _sBuilder.ToString();
}
}
使用代码
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Person objP = new Person();
objP.FirstName = "John";
objP.LastName = "Doe";
objP.Attributes = new Dictionary<string, string>();
objP.Attributes.Add("PhoneNumber", "12345");
objP.Attributes.Add("StreetName", "StackOverFlow Street");
objP.Attributes.Add("StreetNumber", "51");
DictionarySerializer ds = new DictionarySerializer();
string val = ds.WriteXml(objP);
}
}