小编Hub*_*pek的帖子

使用protobuf-net进行惰性,流驱动的对象序列化

我们正在开发用于流式传输大量数据的WCF服务,因此我们选择使用WCF流功能与protobuf-net序列化相结合.

语境:

通常,一个想法是序列化服务中的对象,将它们写入流并发送.另一方面,调用者将接收Stream对象,它可以读取所有数据.

所以目前服务方法代码看起来有点像这样:

public Result TestMethod(Parameter parameter)
{
    // Create response
    var responseObject = new BusinessResponse { Value = "some very large data"};

    // The resposne have to be serialized in advance to intermediate MemoryStream
    var stream = new MemoryStream();
    serializer.Serialize(stream, responseObject);
    stream.Position = 0;

    // ResultBody is a stream, Result is a MessageContract
    return new Result {ResultBody = stream};
}
Run Code Online (Sandbox Code Playgroud)

BusinessResponse对象被序列化为MemoryStream,并从方法返回.在客户端,调用代码如下所示:

var parameter = new Parameter();

// Call the service method
var methodResult = …
Run Code Online (Sandbox Code Playgroud)

c# streaming wcf serialization protobuf-net

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

如何将多个Linq表达式的结果合并为一个表达式?

我有一个Linq表达式列表,List<Expression>其中每个表达式类型(表达式将返回的类型)是ItemItem[].

我正在尝试编写一些代码,将提到的集合作为输入参数,并生成一个Linq表达式,它将返回一个列表(或数组)的项目(Item[]).

这是一个抽象的例子:

public static string[] GetStrings()
{
    return new[]
        {
            "first",
            "second",
            "third"
        };
}

public static string GetString()
{
    return "single1";
}

private void SOExample()
{
    var expressions = new List<Expression>
    {
        Expression.Call(GetType().GetMethod("GetString")),
        Expression.Call(GetType().GetMethod("GetStrings")), 
        Expression.Call(GetType().GetMethod("GetString")),
        Expression.Call(GetType().GetMethod("GetStrings"))
    };

    // some magic code here
    var combined = SomeMagicHere(expressions);
}


private Expression SomeMagicHere(List<Expression> expressions)
{
    foreach (var expression in expressions)
    {
        if (expression.Type.IsArray)
        {
            // Use array's elements
        } 
        else
        {
            // Use …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression linq-expressions

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