C# 寻找使用XML文件作为常量数据源的可行解决方案
我正在寻找如何最好地解决我的问题的建议 我有一个web应用程序,它将利用数据库和XML文件作为数据源 更新数据库没有问题,处理XML文件没有问题 首先,要理解web应用是当前(以及表现不佳的生产系统)的一个旁路。因此没有灵活性 因此,对于XML文件,如果用户添加/更新/删除字段,则需要执行以下步骤。C# 寻找使用XML文件作为常量数据源的可行解决方案,c#,xml,C#,Xml,我正在寻找如何最好地解决我的问题的建议 我有一个web应用程序,它将利用数据库和XML文件作为数据源 更新数据库没有问题,处理XML文件没有问题 首先,要理解web应用是当前(以及表现不佳的生产系统)的一个旁路。因此没有灵活性 因此,对于XML文件,如果用户添加/更新/删除字段,则需要执行以下步骤。 从linux服务器中提取XML文件 将XML文件解析为UI的POCO 通过修改从POCOs重新创建XML文件 将XML文件推送到linux服务器 唯一对我有利的是,在给定的时间内,我不会有太多用户使
唯一对我有利的是,在给定的时间内,我不会有太多用户使用此应用程序。我强烈建议查看
DataContractSerializer
,以满足您的序列化需求。对象必须遵循与XML相同的格式,但没有理由不能将这些对象作为模型。下面是一个标记POCO以自动与XML进行序列化的示例:
[DataContract]
public class Account
{
[DataMember, XmlAttribute]
public string Name { get; set; }
[DataMember]
public double Balance { get; set; }
}
然后使用如下序列化代码:
string serializedAccount = null;
XmlSerializer serializer = new XmlSerializer(typeof(Account));
using(StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, myAccountObject);
serializedAccount = writer.ToString();
}
// serializedAccount should look something like this:
//
// <Account Name="MyName">
// <Balance>100</Balance>
// </Account>
//
// Each of the DataMember and DataContract attributes allow you to override
// names so that you can make them lower case, or provide a more meaningful
// name in your POCO.
Account deserializedAccount = null;
using(StringReader reader = new StringReader(serializedAccount))
{
deserializedAccount = serializer.DeSerialize(reader) as Account;
}
字符串序列化daccount=null;
XmlSerializer serializer=新的XmlSerializer(typeof(Account));
使用(StringWriter=新StringWriter())
{
serializer.Serialize(writer,myAccountObject);
serializedAccount=writer.ToString();
}
//序列化计数应如下所示:
//
//
// 100
//
//
//每个DataMember和DataContract属性都允许您覆盖
//名称,以便将其小写,或提供更有意义的
//在您的POCO中输入您的姓名。
帐户反序列化daccount=null;
使用(StringReader=新StringReader(serializedAccount))
{
deserializedAccount=序列化程序。将(读取器)反序列化为帐户;
}
要记住以下几点:
- DataContract是一种选择加入策略。除非明确将成员标记为已忽略,否则将忽略成员
- 如果要显式将字段或属性标记为已忽略,请使用
属性。即使只是出于文档目的,它也很方便[IgnoreDataMember]
- 序列化程序中没有任何内容阻止您实现
,因此您的所有属性都可以绑定(对于WPF很方便)INotifyPropertyChanged
- 如果XML格式不是要用作UI模型的格式,则可能仍需要将一个对象中的属性映射到另一个对象中的属性。这仍然比自己手工编写XML读/写代码要容易几个数量级
注意:如果您的服务器实现了正确的soapwebapi,那么WCF可以获取WSDL并生成到API和需要序列化的对象的绑定。如果是REST API,则需要做更多的工作,但也支持REST API。听起来不错,开始编码吧。您的xml文件是否在POCO中有可以直接从xml文件序列化和反序列化的表示形式?我假设POCO对象是二进制的,xml只是数据的包装。所以二进制可能是UU编码的。因此,首先必须使用UUDecode来获取二进制文件。一旦你有二进制,最好在C++代码之前使用C++实用程序把二进制文件打包成对象。