在 wcf rest C# 中始终输入参数为 NULL

Always the input parameter is NULL in wcf rest C#

我有服务 "ImportStream" wcf post :

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void ImportStream(StreamObject data);

和 class StreamObject :

[DataContract]
public class StreamObject
{
    [DataMember]
    public Char Comma { get; set; }
    [DataMember]
    public Stream Stream { get; set; }
}

我的代码:

public void ImportStream(StreamObject data)
{
    // ....
}

我用 POSTMAN 测试它:

{
    "Comma": ",",
    "Stream": "test;;;;test2,result....!!!!"
}

但我的数据总是空的!!我不明白这是什么问题? 我该如何解决?

我不知道如何在Json序列化

中使用Stream

我看到的第一个问题是 Stream 是一个抽象 class。如何反序列化?

另一个问题是不是所有的流都可以序列化:

var value = new StreamObject { Comma = ',' };
value.Stream = new MemoryStream(Encoding.ASCII.GetBytes("turn left then right and go straight"));

var str = System.Text.Json.JsonSerializer.Serialize(value);

在尝试序列化 MemoryStream 时引发类似 Timeouts are not supported on this stream. 的错误。

请考虑使用 byte[]string 数据类型,而不是 Stream

根据您展示的 Postman 示例,您可以将其与 string 一起使用:

[DataContract]
public class StreamObject
{
    [DataMember]
    public Char Comma { get; set; }
    [DataMember]
    public string Stream { get; set; }
}