我有一个名为'Call'的小类,我需要将这些调用存储到一个平面文件中.我创建了另一个名为"CallStorage"的类,其中包含一个数组,我将这些调用放入其中.
我的问题是我想将这个数组存储到磁盘上,以便稍后再读回来并从该数组中获取调用.
我试图使用serialize()和unserialize()实现这一点,但这些似乎有点奇怪,部分信息丢失了.
这就是我正在做的事情:
//write array to disk
$filename = $path . 'calls-' . $today;
$serialized = serialize($this->array);
$fp = fopen($filename, 'a');
fwrite($fp, $serialized);
fclose($fp);
//read array from serialized file
$filename = $path . 'calls-' . $today;
if (file_exists($filename)) {
$handle = fopen($filename, 'r');
$contents = fread($handle, filesize($filename));
fclose($handle);
$unserialized = unserialize($contents);
$this->setArray($unserialized);
}
Run Code Online (Sandbox Code Playgroud)
有人能看出我做错了什么,或者是什么.我还试图序列化并编写包含普通字符串的数组.我没有设法让它工作..我有一个Java背景,所以我只是不明白为什么我不能只是将数组写入磁盘,如果它被序列化.:)
假设对象A有6个字段,现在对象A被序列化,经过一段时间后,再添加3个字段并对对象进行反序列化.
我有以下表格:
<form id="MakeDocumentForm" name="MakeDocumentForm"
action="Document/GetWordDocument" method="post"
enctype="application/json">
<button type="submit" style="float:right;">Make Word Document</button>
<textarea id="hiddenJson"
name="hiddenJson"
data-bind="text: ko.toJSON(viewModel.selectedDocument)"
rows="5" cols="100"
style="visibility:hidden;" >
</textarea>
</form>
Run Code Online (Sandbox Code Playgroud)
该data-bind属性是knockoutjs - 但这并不重要,textarea正确包含作为序列化对象的JSON.
[HttpPost]
public void GetWordDocument(DocumentModel hiddenJson)
{
//hiddenJson is not a correctly populated instance of my DocumentModel class
//any MVC experts know what I am doing wrong?
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何对MVC 3应用程序执行表单POST并获取反序列化的类?
当我Serializable在课堂上时,是否需要添加Serializable到班级中的所有对象?
例如,
public class User implements Serializable{
private List<Role> role;
private Task task;
}
Run Code Online (Sandbox Code Playgroud)
我是否需要添加Serializable到Role和Task,太?
public class Task implements Serializable{
// ...
}
public class Role implements Serializable{
// ...
}
Run Code Online (Sandbox Code Playgroud) 基本上这就是我在做的事情:
我使用PHPXMLRPC与Odoo进行通信.
从本质上讲,我需要发送的每个请求都需要遵循以下结构:
//The database I wish to connect too
$msg->addParam(new xmlrpcval($this->dbname, "string"));
//The logged in user id
$msg->addParam(new xmlrpcval($this->userID, "int"));
//The logged in users password
$msg->addParam(new xmlrpcval($this->password, "string"));
//The model
$msg->addParam(new xmlrpcval("project.project", "string"));
//The method Im requesting to call
$msg->addParam(new xmlrpcval("read", "string"));
//Query parameters
$msg->addParam(new xmlrpcval($id_list, "array"));
$msg->addParam(new xmlrpcval($field_list, "array"));
Run Code Online (Sandbox Code Playgroud)
现在我编写了一个类,在其构造函数中将实例变量设置为传递给其构造函数的值,即
class PHPClient{
private $userName;
private $password;
private $dbname;
private $server_url;
private $userID;
public function __construct($server_url, $database, $user, $password)
{
$this->server_url = $server_url;
$this->dbname = $database;
$this->userName = $user; …Run Code Online (Sandbox Code Playgroud) 这是示例代码...但我得到了serializationException.
xlbook是对象,我想将此对象保存到memorystream.
unsafe public void Save(IStream stream, bool clearDirty, Excel.Workbook xlbook)
{
try
{
//if (stream == null)
//{
// return;
//}
//object data = xlbook;
if (xlbook == null)
{
return;
}
// convert data to byteArray
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
//AppDomain currentDomain = AppDomain.CurrentDomain;
//currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
//here im getting exception.
binaryFormatter.Serialize(memoryStream, xlbook);
byte[] bytes = memoryStream.ToArray();
memoryStream.Close();
//get memory pointer
int cb;
int* pcb = &cb;
//save data
byte[] arrayLen …Run Code Online (Sandbox Code Playgroud) c# ×2
php ×2
arrays ×1
asp.net ×1
asp.net-mvc ×1
assemblies ×1
java ×1
knockout.js ×1
memorystream ×1
odoo ×1
post ×1
security ×1
serializable ×1