数组是不能用echo直接输出的,否则只会显示 Array,表明这是个数组,具体内容不会显示。
可以这样来输出数组内容:
print_r($filelist_arry);
如果需要更美观的输出样式,就要遍历数组逐个输出了
工具/原料
Visual Studio(本文使用VS2013,其他版本亦可)。
准备工作和类设计
1
启动VS,新建C# 类库项目,并命名为KTools。
2
添加C# Winform项目,命名为Test,重命名主窗口为MainForm,并设置为启动项。同时在KTools项目添加文件夹Serializer,并在该文件夹中添加3个类:XMLSerializer、SoapSerializer和BinarySerializer,如下图:
3
该类库的设计目标是快速方便,最好把序列化和反序列化的方法做成静态方法,这样就可以省去了实例化的步骤。序列化大体上分为序列化到文件和序列化到流,虽然序列化到流更为通用,但序列化到流的步骤中似乎没有什么可简化的,故我们只讨论序列化到文件。对于序列化到文件,我们需要考虑文件是否存在、写入是否覆盖等,为了方便使用只考虑“存在覆盖”的原则。为了尽可能的避免异常(因为这样使用起来更简单,不必考虑是否会引发异常),我们必须确保对象可序列化、文件存在、反序列化时文件不空等。另外,为了避免反序列化时的类型转化,以及更好的使用类,把序列化和范序列化的方法做成泛型。
END
XML序列化和反序列化
1
XML序列化需要引用名称空间SystemXmlSerialization,序列化代码如下:
public static void Serialize<T>(T o, string filePath)
{
try
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
StreamWriter sw = new StreamWriter(filePath, false);
formatterSerialize(sw, o);
swFlush();
swClose();
}
catch (Exception) { }
}
2
XML反序列化,代码如下:
public static T DeSerialize<T>(string filePath)
{
try
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
StreamReader sr = new StreamReader(filePath);
T o = (T)formatterDeserialize(sr);
srClose();
return o;
}
catch (Exception)
{
}
return default(T);
}
END
Soap序列化
1
Soap序列化需要名称引用空间SystemRuntimeSerializationFormattersSoap,并且该dll引用需要手工添加。Soap序列化代码,如下:
public static void Serialize<T>(T o, string filePath)
{
try
{
SoapFormatter formatter = new SoapFormatter();
// StreamWriter sw = new StreamWriter(filePath, false);
Stream stream = new FileStream(filePath , FileModeOpenOrCreate, FileAccessWrite, FileShareNone);
formatterSerialize(stream, o);
streamFlush();
streamClose();
}
catch (Exception) { }
}
2
Soap反序列化,代码如下:
public static T DeSerialize<T>(string filePath)
{
try
{
SoapFormatter formatter = new SoapFormatter();
// StreamReader sr = new StreamReader(filePath);
Stream destream = new FileStream(filePath, FileModeOpen, FileAccessRead, FileShareRead);
T o = (T)formatterDeserialize(destream);
destreamFlush();
destreamClose();
return o;
}
catch (Exception)
{
}
return default(T);
}
END
Binary序列化和反序列化
1
Binary序列化,代码:
public static void Serialize<T>(T o, string filePath)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filePath, FileModeOpenOrCreate, FileAccessWrite, FileShareNone);
formatterSerialize(stream, o);
streamFlush();
streamClose();
}
catch (Exception) { }
}
2
Binary反序列化,代码:
public static T DeSerialize<T>(string filePath)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
Stream destream = new FileStream(filePath, FileModeOpen, FileAccessRead, FileShareRead);
T o = (T)formatterDeserialize(destream);
destreamFlush();
destreamClose();
return o;
}
catch (Exception)
{
}
return default(T);
}
END
测试
在Test项目中的MainForm窗体中添加两个Button控件,分别命名为“序列化”和“反序列化”,并添加代码:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string str = "Hello world!!!";
KToolsSerializerXMLSerializerSerialize<string>(str, "1txt");
MessageBoxShow("序列化完毕");
}
private void button2_Click(object sender, EventArgs e)
{
string str = KToolsSerializerXMLSerializerDeSerialize<string>("1txt");
MessageBoxShow(str);
}
}
调试运行,查看结果:
以上就是关于PHP serialize 后Unserialize解码字符串为什么为空全部的内容,包括:PHP serialize 后Unserialize解码字符串为什么为空、C#关于序列化和反序列化、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)