C# 读写XML文件封装, 直接按类来保存和读取

using System;
using System.IO;
using System.Xml.Serialization;
using System.Collections.Generic;


using LogLib; // 如果没有加载该库,请删除所有logger


// add your data to here
public class ClientUserDefaultData
{
public LoginDefaultData loginData = new LoginDefaultData();
}


public class XMLUserDataDefaultMgr
{
private static bool canTryAgain = true;
private static string mFileName = null;
private static ClientUserDefaultData mUserDefaultData = new ClientUserDefaultData();


public static ClientUserDefaultData UserDefaultData
{
get { return mUserDefaultData; }
}


public static void InitWithFileName(string fileName)
{
if(fileName == null) return;


mFileName = fileName; // @"d:\SerializationOverview.xml"
Logger.Info("XMLUserDataDefaultMgr.....mFileName={0}", mFileName);
}


/* you must execute this function earier than ReadFromXML, 
* executing first time after create role success, 
* then you can execute each one making yourself */
public static void WriteToXML()
{
if(mFileName == null) return;
StreamWriter file = null;
try
{
file = new StreamWriter(mFileName);
Logger.Info("WriteToXML.....file open normal");


if(file == null) return;
XmlSerializer writer = new XmlSerializer(typeof(ClientUserDefaultData));

if(writer == null)
{
file.Close();
return;
}


writer.Serialize(file, mUserDefaultData);
Logger.Info("WriteToXML.....Serialize ok");
}
catch(IOException)
{
Logger.Info("WriteToXML.....cann't open needed file");
}
finally
{
if(file != null) file.Close();
Logger.Info("WriteToXML.....in finally");
}


file.Close();
}

public static void ReadFromXML()
{
if(mFileName == null) return;


StreamReader file = null;
XmlSerializer reader = null;
retry:
try
{
canTryAgain = false;


// open file
file = new StreamReader(mFileName);
Logger.Info("ReadFromXML.....file open normal");


// get de-serialize data format
if(file == null) return;
reader = new XmlSerializer(typeof(ClientUserDefaultData));


// do de-serialize
if(reader == null)
{
file.Close();
return;
}


mUserDefaultData = (ClientUserDefaultData)reader.Deserialize(file);
Logger.Info("ReadFromXML.....de-serialize ok");
}
catch (FileNotFoundException)
{
Logger.Info("ReadFromXML.....file not found");
WriteToXML();
if(canTryAgain)
goto retry;
}
catch(IOException)
{
Logger.Info("ReadFromXML.....cann't open needed file");
}
catch (InvalidOperationException)
{
Logger.Info("ReadFromXML.....deserialize error, may be is file not match");
}
finally
{
if(file != null) file.Close();
Logger.Info("ReadFromXML.....in finally");
}

file.Close();
}
}


// for save login information of user
public class LoginDefaultData
{
public bool bCheckBoxState = false; // default is false
public string strUserName = null; // default no
}

C#中,你可以创建一个名为`XmlFileHandler`的,用于封装读取和写入XML文件的操作。这里是一个简单的示例: ```csharp using System; using System.IO; using System.Xml; public class XmlFileHandler { // 文件路径属性 private string filePath; public XmlFileHandler(string filePath) { this.filePath = filePath; } // 保存XML到文件 public void SaveData(object data, string xmlNamespace = "") { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(ConvertToValidXml(data, xmlNamespace)); try { xmlDoc.Save(filePath); Console.WriteLine($"数据已成功保存到 {filePath}"); } catch (Exception ex) { Console.WriteLine($"保存过程中发生错误: {ex.Message}"); } } // 将.NET对象转换为XML字符串 private static string ConvertToValidXml(object obj, string namespacePrefix) { if (obj == null) return ""; var serializer = new XmlSerializer(obj.GetType()); using (var stringWriter = new StringWriter()) { serializer.Serialize(stringWriter, obj, new XmlSerializerNamespaces(new[] { new XmlQualifiedName(namespacePrefix, "") })); return stringWriter.ToString(); } } // 从文件加载XML public T LoadData<T>() where T : class { try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filePath); return (T)serializer.Deserialize(new StringReader(xmlDoc.OuterXml), typeof(T)); } catch (Exception ex) { Console.WriteLine($"加载过程中发生错误: {ex.Message}"); return default(T); } } } // 使用示例 public class MyData { public string Name { get; set; } public int Age { get; set; } } public class Program { public static void Main() { MyData data = new MyData() { Name = "John", Age = 30 }; XmlFileHandler handler = new XmlFileHandler("data.xml"); handler.SaveData(data); // 后续可以这样读取数据: MyData loadedData = handler.LoadData<MyData>(); Console.WriteLine(loadedData.Name); // 输出 "John" } } ``` 这个`XmlFileHandler`有两个方法:`SaveData`用于将对象序列化为XML并写入文件,`LoadData`则用于从文件中反序列化回对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值