【问题标题】:Serializing Form in C# using Remoting使用 Remoting 在 C# 中序列化表单
【发布时间】:2012-06-08 02:59:01
【问题描述】:

嗯,首先,我已经在互联网上浏览了两个多小时,但我真的找不到任何有用的答案来解决我的问题。 好吧,它很简单: 我有一个客户端-服务器程序,我需要使用远程处理和表单列出服务器中的文件(我知道 WCF,但这不是重点)。好吧,我的所有列表目录/文件夹都可以正常工作(在我自己的 PC 上进行没有远程处理的测试),但是当我尝试“远程处理”这个时,我遇到了困难。

首先:我使用http作为频道,注册和激活都可以。至少我猜,因为我正在使用:

RemotingServices.Marshal(Server,"ListaArquivos")

在服务器中和

server = (Server)Activator.GetObject(typeof(ServerDLL.Server), "http://localhost:12345/ListaArquivos")

在客户端中,Server 是 .dll (MarshalByRefObject)。

我的步骤是:

  1. 我有一个 .dll 类(继承 MarshalByRefObject),它包含我在客户端到服务器步骤中调用的所有方法。 其中 1 个方法返回 TreeNodeCollection 和...
  2. 在客户端表单中,我调用此方法并尝试将此集合插入表单中,但此时我得到“Windows.Form.TreeNodeCollection”blabla“不可序列化”。

这是我的疑问,我怎样才能做到这一点? P.S->我的项目链接:My Explorer

【问题讨论】:

  • 你是序列化数据还是表单?数据是一回事,这很常见。但是,如果您尝试通过网络发送表格……那就是另一回事了。我会避免的。

标签: c# .net winforms remoting


【解决方案1】:

如果你想要的只是一个档案列表,你应该只发送文件列表,很可能是一个字符串数组。您的TreeNodeCollection 应该在客户端该列表中构建。

如果您需要发送比简单字符串数组更多的信息(即您需要树结构),请定义一个简单的数据类型来发送信息:

[Serializable]
class Node
{
    public string Name;
    public Node[] Children;
}

【讨论】:

  • 你的意思是西蒙?如果我想要从服务器获取文件,为什么要在客户端?我不明白!感谢您到目前为止的帮助!
  • 文件列表来自服务器,所以文件列表应该通过远程处理从服务器到客户端,但是UI元素(即TreeNodeCollection)应该由客户端构建。您不想通过远程发送 UI 元素。
【解决方案2】:

您可能想看看这个项目:http://www.codeproject.com/Articles/24508/How-to-Serialize-a-TreeNode-Object

基本上,您可以为任何类制作一个包装器,并通过添加[Serializable] 属性使其可序列化

[Serializable]
public class MyClass : InheritedClass
{//Your code}

【讨论】:

  • 但我使用的是表单,我尝试输入 [Serializable] 但没有任何反应。本教程继承自 TreeNodeCollection,但在我的项目中我返回 TreeNodeCollection 和 ListView,所以我必须创建 2 个不同的类,这不是一件好事……还有其他想法吗?感谢您到目前为止的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多