小编Nic*_*yle的帖子

使用protobuf-net反序列化未知类型

我有2个网络应用程序,应该相互发送序列化的protobuf-net消息.我可以序列化对象并发送它们,但是,我无法弄清楚如何反序列化接收的字节.

我尝试使用它反序列化,并且失败并出现NullReferenceException.

// Where "ms" is a memorystream containing the serialized
// byte array from the network.
Messages.BaseMessage message =
  ProtoBuf.Serializer.Deserialize<Messages.BaseMessage>(ms);
Run Code Online (Sandbox Code Playgroud)

我在包含消息类型ID的序列化字节之前传递一个标头,我可以在一个巨大的switch语句中使用它返回预期的sublcass Type.使用下面的块,我收到错误:System.Reflection.TargetInvocationException ---> System.NullReferenceException.

//Where "ms" is a memorystream and "messageType" is a
//Uint16.
Type t = Messages.Helper.GetMessageType(messageType);
System.Reflection.MethodInfo method =
  typeof(ProtoBuf.Serializer).GetMethod("Deserialize").MakeGenericMethod(t);
message = method.Invoke(null, new object[] { ms }) as Messages.BaseMessage;
Run Code Online (Sandbox Code Playgroud)

这是我用来通过网络发送消息的功能:

internal void Send(Messages.BaseMessage message){
  using (System.IO.MemoryStream ms = new System.IO.MemoryStream()){
    ProtoBuf.Serializer.Serialize(ms, message);
    byte[] messageTypeAndLength = new byte[4];
    Buffer.BlockCopy(BitConverter.GetBytes(message.messageType), 0, messageTypeAndLength, 0, 2);
    Buffer.BlockCopy(BitConverter.GetBytes((UInt16)ms.Length), 0, …
Run Code Online (Sandbox Code Playgroud)

c# serialization protocol-buffers protobuf-net

21
推荐指数
2
解决办法
2万
查看次数

"还原自动迁移"是什么意思?

改变源控制分支,运行更新的数据库的回滚到先前的迁移之后,EF有时会显示文本"还原自动迁移",象下面这样:

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
Run Code Online (Sandbox Code Playgroud)

实体框架如何确定迁移应该是自动的,它的作用有何不同?

以下是如何重现它,假设您已经设置了一个已经设置了代码优先迁移的项目:

  1. 切换到源代码管理中的新分支
  2. 对模型,映射器进行更改并添加迁移
  3. 更新数据库
  4. 切换回默认分支
  5. Update-Database -TargetMigration:0 -Force
  6. 请参阅Update-Database命令的结果中的"还原自动迁移"

这就是我认为正在发生的事情,如果我错了,请纠正我.

  • Update-Database枚举__MigrationHistory中的迁移
  • 它在项目中找到相应的迁移文件并调用Down()方法
  • 如果相应的迁移文件不存在,那么它执行的最佳猜测如何基于在__MigrationHistory快照回滚迁移

database ef-migrations entity-framework-5

14
推荐指数
1
解决办法
799
查看次数

如何创建iPhone主屏幕等图标网格?

我应该如何在iPhone上创建类似于Springboard(主屏幕)的UI?我想要一个均匀间隔的按钮网格和图像,我可以响应按钮.

UITable是否合适?我应该使用普通的UIView并在DrawRect中手动定位图标吗?是否有替代方案可以自动均匀分隔按钮,允许重新组织,并根据iPhone方向调整布局?

我来自C#/ Winforms背景,现在我正在使用2.2.1标题在Open Toolchain上开始iPhone开发.

iphone cocoa-touch uibutton uitableview quartz-graphics

11
推荐指数
2
解决办法
1万
查看次数

列出运行时从开放泛型类型创建的已关闭类型

当我列出当前AppDomain中的所有类型时,我会看到带有通用占位符的泛型类型.但是,如果我使用类型实例化我的泛型类型,然后列出appDomain中的所有类型,我看不到新创建的封闭类型.

在下面的示例中,输出仅为:

Foo`1[T]
Run Code Online (Sandbox Code Playgroud)

我正在寻找封闭式:

Foo`1[System.Int32]
Run Code Online (Sandbox Code Playgroud)

有没有办法根据我的开放泛型类型查看运行时为我创建的封闭类型?

class Foo<T>
{
}

class Program
{
    static void Main(string[] args)
    {
        var tmp = new Foo<int>();
        ListTypes();
    }

    private static void ListTypes()
    {
        var types = from assembly in AppDomain.CurrentDomain.GetAssemblies()
                        from type in assembly.GetTypes()
                        where type.Name.Contains("Foo")
                        select type;

        foreach (var type in types)
            Console.WriteLine(type.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试通过泛型参数找到所有类型,以期发现封闭类型.

class Foo<T>
{
}

class Bar
{
}

class Program
{
    static void Main(string[] args)
    {
        var tmp = new Foo<Bar>();
        ListTypes();
    }

    private static void …
Run Code Online (Sandbox Code Playgroud)

.net generics clr

10
推荐指数
1
解决办法
216
查看次数

将linq查询转换为icollection

我需要获取查询结果:

 var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;
Run Code Online (Sandbox Code Playgroud)

并准备作为ICollection,以便我可以有类似的东西

 ICollection<SoilSamplingSubJob> subjobs
Run Code Online (Sandbox Code Playgroud)

目前我创建了一个不符合我需求的列表:

query.ToList();
Run Code Online (Sandbox Code Playgroud)

我该怎么办 - 是query.ToIcollection()?

list icollection

8
推荐指数
1
解决办法
6537
查看次数

EF4无法将具体类型转换为接口

使用实体框架LINQ,我想为每个父表返回一个父类,并在父类上使用接口的多个具体实现之一填充其类型为接口的属性.应根据父表中字段的值在查询时确定哪个具体实现.

在一个非常简单的例子中,我有3个表和3个相应的POCO.

简单的表格,例如

三张桌子:主人和两个孩子

简单的类为了举例

internal interface IConfiguration
{
}

internal class ConfigurationContainer
{
    public IConfiguration Config { get; set; }
}

internal class ConfigurationSouth : IConfiguration
{
}

internal class ConfigurationNorth : IConfiguration
{
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我循环遍历所有父结果并确定在循环内使用哪个子查询.事情这个块.

foreach (var configMaster in db.ConfigMasters.ToList())
{
    var configContainer = new ConfigurationContainer();
    if (configMaster.IsNorth)
        configContainer.Config = (from x in db.ConfigNorths
                          select new ConfigurationNorth())
                                      .FirstOrDefault();
    else
        configContainer.Config = (from x in db.ConfigSouths
                          select new ConfigurationSouth())
                                      .FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

循环遍历每个父记录以执行子查询不是最佳的.我真的很喜欢EF LINQ在一次数据库中执行查询以及对我的POCO进行预测.

我想出了这个LINQ来一次查询数据库并返回投影对象,以便在查询时由两个子查询中的一个填充Config属性.虽然它编译,但它会在运行时抛出异常.

using (var db = …
Run Code Online (Sandbox Code Playgroud)

.net polymorphism linq-to-entities entity-framework-4

5
推荐指数
1
解决办法
318
查看次数

将"const void*"转换为"const char*"

我有这样的代码:

NSData *data = [NSData dataWithContentsOfURL:objURL];
const void *buffer = [data bytes];
[self _loadData:buffer];
[data release];
Run Code Online (Sandbox Code Playgroud)

"_loadData"函数采用如下参数:

- (void)_loadData:(const char *)data;
Run Code Online (Sandbox Code Playgroud)

如何在Objective-C上将"const void "转换为"const char "?

pointers casting const objective-c

3
推荐指数
1
解决办法
7751
查看次数