小编Mui*_*ota的帖子

如何通过Json.NET评论阅读json

为了在Google Chrome浏览器中安装外部扩展程序,我尝试更新chrome外部扩展json文件.使用Json.NET它似乎很容易:

string fileName = "..."; // path to chrome external extension json file

string externalExtensionsJson = File.ReadAllText(fileName);

JObject externalExtensions = JObject.Parse(externalExtensionsJson);
Run Code Online (Sandbox Code Playgroud)


但我得到一个Newtonsoft.Json.JsonReaderException说法:

"Error parsing comment. Expected: *, got /. Path '', line 1, position 1." 
Run Code Online (Sandbox Code Playgroud)


在调用时,JObject.Parse因为此文件包含:

// This json file will contain a list of extensions that will be included
// in the installer.

{
}
Run Code Online (Sandbox Code Playgroud)

和注释不是json的一部分(如何在Json.NET输出中添加注释?).

我知道我可以用正则表达式删除注释(正则表达式删除javascript双斜杠(//)样式注释)但我需要在修改后将json重写到文件中并保持评论可能是一个很好的想法.

问题:有没有办法在没有删除它们的情况下读取带有注释的json并能够重写它们?

c# json.net

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

如何在运行中压缩http请求而不在内存中加载压缩缓冲区

我需要将http post请求中的大量数据发送到支持gziped编码请求的服务器.

从简单开始

public async Task<string> DoPost(HttpContent content)
{
  HttpClient client = new HttpClient();
  HttpResponseMessage response = await client.PostAsync("http://myUri", content);

  response.EnsureSuccessStatusCode();
  return await response.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)

我刚刚添加了预压缩

public async Task<string> DoPost(HttpContent content, bool compress)
{
  if (compress) 
    content= await CompressAsync(content);

  return await DoPost(content);
}

private static async Task<StreamContent> CompressAsync(HttpContent content)
{
  MemoryStream ms = new MemoryStream();
  using (GZipStream gzipStream = new GZipStream(ms, CompressionMode.Compress, true))
  {
    await content.CopyToAsync(gzipStream);
    await gzipStream.FlushAsync();
  }

  ms.Position = 0;
  StreamContent compressedStreamContent = new StreamContent(ms);
  compressedStreamContent.Headers.ContentType = content.Headers.ContentType; …
Run Code Online (Sandbox Code Playgroud)

.net compression gzip c#-4.0 dotnet-httpclient

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

如何动态控制台应用程序或Windows应用程序

我有一个小应用程序,应该以两种模式执行:非UI或WPF窗口.它应该依赖于命令行参数.

在每种模式中,我都需要显示一些反馈日志:

  1. 在WPF窗口模式下,WPF将负责可视化日志,
  2. 在没有UI模式下,我需要一个控制台来显示日志.如果我的应用程序是从控制台(主要是cmd.exe)启动的,我想在不打开新的应用程序的情况下使用它.如果我的应用程序已在控制台外启动(双击资源管理器,CreateProcess,...),我需要创建一个新的控制台来输出我的结果并等待Readkey关闭它.

我已经找到:

而且我知道我可以在项目属性中静态选择"Windows应用程序"或"控制台应用程序".

选择"Windows应用程序",GetConsoleWindow()始终为0,我看不到如何重用以前的控制台.

选择"控制台应用程序",我可以重用以前的控制台,但是当在WPF窗口模式下从资源管理器启动时,会在我的WPF主窗口下创建一个控制台.

问题是:应用程序如何真正动态?在WPF窗口模式下,只有一个WPF窗口(根本没有控制台)或非UI,只有一个控制台(启动一个或新创建的控制台).

.net c#

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

标签 统计

.net ×2

c# ×2

c#-4.0 ×1

compression ×1

dotnet-httpclient ×1

gzip ×1

json.net ×1