我正在编写一个小工具来连接到MS SCOM服务器并添加用于监控警报的子目录。但是,我想保存连接和订阅设置somwhere / some how。这是粗略的结构
public class ConnectionManager
{
...
public BindingList<Connection> Connections // All the connection we know
...
}
然后我们有了联系。基本上这个类保存所需的连接字段,如服务器名称,用户域,连接到服务器,保持连接等活动等。
public class Connection
{
...
public string Name; // the name of this connection
public string ServerName; // the scom server name
public string UserDomain; // the domain, NETBIOS or FQDN
public BindingList<Subscription> Subscriptions; // The subscriptions for this connection
...
}
最后,连接类具有Alert Criterias。警报标准基本上是某种正则表达式。目前只是“扩展”(只是一个字符串),但我将构建简单的表达式,它将在即时生成。它看起来像这样
public class Subscription
{
...
public string ExtededExpression; // if not empty, use this
public BindingList<CriteriaOperator> SimpleOperators; // otherwhise build a regular expression from this stuff
...
}
与另一个子类
public class CriteriaOperator
{
...
public string Field; // The field, g.g. LastModified
public LogicalOperator Operator; // The logical operator, e.g. LIKE
public string CompareFieldTo; // A regular expression, e.g. "%SQL%"
...
}
现在我的问题是:您认为保存这种结构的最佳方法是什么?我是.NET的新手,所以我不确定:使用应用程序设置?或者使用XML Serializer对此结构进行序列化/反序列化?或者写一些包装类然后使用XML Serializer?或者可能还有其他方法吗?
感谢您的帮助!
答案 0 :(得分:1)
我建议不要使用ApplicationSettings 。 IMHO ApplicationsSettings用于存储和重新加载您的UI状态,例如特定用户中文本编辑器中的最后10个文件或“不再显示此消息”!
如果您正在考虑加载/保存方案,我建议创建一个类来存储保存应用程序状态所需的所有字段。 不要使用序列化直接存储某些逻辑类,否则会搞乱事情并降低可维护性。
通过使用一个保存项目,您可以将所有加载/存储操作集中在一个位置。
因此...
public class SaveItem
{
// ----------------------------------------------
// version 1.02:
public bool New { get; set; }
public string VeryNew { get; set; }
// ----------------------------------------------
// version 1.01:
public bool Bugfix { get; set; }
public List<string> AList { get; set; }
public SaveItem()
{
// ...
}
public bool TrySave(string fullFilePath)
{
bool result = false;
TextWriter textWriter = new StreamWriter(fullFilePath);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(SaveItem));
try
{
xmlSerializer.Serialize(textWriter, this);
result = true;
}
catch (IOException)
{
}
finally
{
try
{
textWriter.Close();
}
catch
{ }
}
return result;
}
public static bool TryLoad(string fullFilePath, out SaveItem saveItem)
{
bool result = false;
saveItem = new SaveItem();
TextReader textReader = null;
try
{
textReader = new StreamReader(fullFilePath);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(SaveItem));
saveItem = (SaveItem)xmlSerializer.Deserialize(textReader);
if (saveItem != null)
{
result = true;
}
}
catch (FileNotFoundException)
{
if (saveItem != null)
{
}
}
finally
{
if (textReader != null)
{
textReader.Close();
}
}
return result;
}
}
答案 1 :(得分:0)
至于我,为此你应该: