由网友(本王略霸)分享简介:请帮忙。我有这个code,这是我的课连载\反序列化应用程序设置。 [XmlRoot(EvaStartupData)[可序列化]公共类MyConfigClass{公共字符串服务器名{获得;组; }公共字符串数据库{获得;组; }公共字符串用户名{获得;组; }公共字符串用户登陆{获得;组; }公共静态无效MyCon...
请帮忙。我有这个code,这是我的课连载反序列化应用程序设置。
[XmlRoot(EvaStartupData)
[可序列化]
公共类MyConfigClass
{
公共字符串服务器名{获得;组; }
公共字符串数据库{获得;组; }
公共字符串用户名{获得;组; }
公共字符串用户登陆{获得;组; }
公共静态无效MyConfigLoad()
{
FileInfo的F1 =新的FileInfo(myConfigFileName);
如果(fi.Exists)
{
XmlSerializer的mySerializer =新的XmlSerializer(myConfigClass.GetType());
StreamReader的myXmlReader =新的StreamReader(myConfigFileName);
尝试
{
myConfigClass =(MyConfigClass)mySerializer.Deserialize(myXmlReader);
myXmlReader.Close();
}
赶上(例外五)
{
的MessageBox.show(ОшибкасериализацииMyConfigLoad N+ e.Message);
}
最后
{
myXmlReader.Dispose();
}
}
}
公共静态无效MyConfigSave()
{
XmlSerializer的mySerializer =新的XmlSerializer(myConfigClass.GetType());
StreamWriter的myXmlWriter =新的StreamWriter(myConfigFileName);
尝试
{
mySerializer.Serialize(myXmlWriter,myConfigClass);
}
赶上(例外五)
{
的MessageBox.show(ОшибкасериализацииMyConfigSave N+ e.Message);
}
最后
{
myXmlWriter.Dispose();
}
}
}
系列化给予的我简单的XML结构:
<服务器> navuhodonoser< /服务器名>
<数据库>矩阵LT; /数据库>
<用户名>史密斯先生< /用户名>
<用户登陆>新< /用户登陆>
我必须
如何修改我的类来获取这个XML结构:
<连接服务器名称=navuhodonoser数据库=矩阵......>
解决方案
默认情况下,XmlSerializer的序列化将所有公共属性的元素;覆盖,你需要标记每个属性与 [XmlAttribute]
(从System.Xml.Serialization命名空间),这会给你所需的输出。
例如:
[XmlAttribute]
公共字符串服务器名{获得;组; }
[XmlAttribute]
公共字符串数据库{获得;组; }
[的XmlElement]
公共字符串用户名{获得;组; }
//注:无属性
公共字符串用户登陆{获得;组; }
会产生类似:
< XML服务器名称=值数据库=值>
<用户名>值小于/用户名> <! - 请注意,用户名被标记的XmlElement,它匹配的默认行为 - >
<用户登陆>值小于/用户登陆>
< / XML>
please help. I have this code, it's my class to serializedeserialize application settings.
[XmlRoot("EvaStartupData")]
[Serializable]
public class MyConfigClass
{
public string ServerName { get; set; }
public string Database { get; set; }
public string UserName { get; set; }
public string UserLogin { get; set; }
public static void MyConfigLoad()
{
FileInfo fi = new FileInfo(myConfigFileName);
if (fi.Exists)
{
XmlSerializer mySerializer = new XmlSerializer(myConfigClass.GetType());
StreamReader myXmlReader = new StreamReader(myConfigFileName);
try
{
myConfigClass = (MyConfigClass)mySerializer.Deserialize(myXmlReader);
myXmlReader.Close();
}
catch (Exception e)
{
MessageBox.Show("Ошибка сериализации MyConfigLoadn" + e.Message);
}
finally
{
myXmlReader.Dispose();
}
}
}
public static void MyConfigSave()
{
XmlSerializer mySerializer = new XmlSerializer(myConfigClass.GetType());
StreamWriter myXmlWriter = new StreamWriter(myConfigFileName);
try
{
mySerializer.Serialize(myXmlWriter, myConfigClass);
}
catch (Exception e)
{
MessageBox.Show("Ошибка сериализации MyConfigSaven" + e.Message);
}
finally
{
myXmlWriter.Dispose();
}
}
}
Serialization give's me simple xml-structure:
<ServerName>navuhodonoser</ServerName>
<Database>matrix</Database>
<UserName>Mr.Smith</UserName>
<UserLogin>neo</UserLogin>
How must i modify my class to get this xml structure ?:
<Connection ServerName="navuhodonoser" Database="matrix" ....>
解决方案
By default the XmlSerializer will serialize all public properties as elements; to override that you'll need to tag each property with [XmlAttribute]
(from System.Xml.Serialization namespace) which will give you your desired output.
For example:
[XmlAttribute]
public string ServerName { get; set; }
[XmlAttribute]
public string Database { get; set; }
[XmlElement]
public string UserName { get; set; }
// Note: no attribute
public string UserLogin { get; set; }
will produce something like:
<xml ServerName="Value" Database="Value">
<UserName>Value</UserName> <!-- Note that UserName was tagged with XmlElement, which matches the default behavior -->
<UserLogin>Value</UserLogin>
</xml>
相关推荐
最新文章