Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据.NET核心中的前16个字符从流中反序列化JSON_C#_.net_Json_Performance_Gzipstream - Fatal编程技术网

C# 根据.NET核心中的前16个字符从流中反序列化JSON

C# 根据.NET核心中的前16个字符从流中反序列化JSON,c#,.net,json,performance,gzipstream,C#,.net,Json,Performance,Gzipstream,我得到一个Gziped JSON,我检查它是否有特定的开始字符串,如果它正确,我将反序列化到我的对象中: await using var decompressionStream = new GZipStream(externalStream, CompressionMode.Decompress); var streamReader = new StreamReader(decompressionStream); string eventString = streamReader.ReadTo

我得到一个Gziped JSON,我检查它是否有特定的开始字符串,如果它正确,我将反序列化到我的对象中:

await using var decompressionStream = new GZipStream(externalStream, CompressionMode.Decompress);

var streamReader = new StreamReader(decompressionStream);
string eventString = streamReader.ReadToEnd();

if (!eventString.StartsWith("SomeString"))
{
    // Drop it because it can't be deserialized
    return;
}

MyObject item = Utf8Json.JsonSerializer.Deserialize<MyObject>(Encoding.UTF8.GetBytes(eventString));
wait using var decompressionStream=new GZipStream(externalStream,CompressionMode.Decompress);
var streamReader=新的streamReader(解压流);
string eventString=streamReader.ReadToEnd();
如果(!eventString.StartsWith(“SomeString”))
{
//删除它,因为它无法反序列化
返回;
}
MyObject item=Utf8Json.JsonSerializer.Deserialize(Encoding.UTF8.GetBytes(eventString));
这种方法可以工作,但当Utf8Json可以直接从流反序列化时,将流转换为字符串并返回到字节数组似乎是浪费

因为3/4的传入流包含不同类型的数据,并且无法反序列化,所以我不想在其周围放置try/catch块,因为许多异常将过于昂贵


有没有一种方法可以在不消耗前16个字符的情况下查看它们?

[Read_Char[],Int32,Int32](阅读),这是否回答了您的问题?该read命令消耗读取的数据,因此在检查第一个字符后,我无法使用该流进行反序列化,因为它缺少前n个字符。编辑:Peek只能用于1个字符,不幸的是,我需要更多的字符来确定类型。Peek不会消耗数据,但不会走得更远。也许第一个字符足以将抛出次数减少一个合理的幅度。也许您希望将第一个n字符存储在从StreamReader继承的变量或包装类中。但据我所知,您将以任何方式读取这16个字符,您可以从流中读取前N个字节,并将它们与
“SomeString”
的字节表示形式进行比较。假设它们匹配,将
N
字节放入
MemoryStream
中,并使用
ConcatenatedStream
from-to将其与
GZipStream
[Read_Char[],Int32,Int32\]()的其余部分组合,这是否回答了您的问题?该read命令消耗读取的数据,因此在检查第一个字符后,我无法使用该流进行反序列化,因为它缺少前n个字符。编辑:Peek只能用于1个字符,不幸的是,我需要更多的字符来确定类型。Peek不会消耗数据,但不会走得更远。也许第一个字符足以将抛出次数减少一个合理的幅度。也许您希望将第一个n字符存储在从StreamReader继承的变量或包装类中。但据我所知,您将以任何方式读取这16个字符,您可以从流中读取前N个字节,并将它们与
“SomeString”
的字节表示形式进行比较。假设它们匹配,将
N
字节放入
MemoryStream
中,并使用
ConcatenatedStream
from-to将其与
gzip流的其余部分组合。