小编Ari*_*edi的帖子

JSON.NET在忽略null属性的同时序列化JObject

我有一个JObject用作调用RESTful Web服务的模板.这JObject是通过解析器创建的,因为它被用作模板告诉用户端点模式是什么样的,我不得不想办法保留所有属性,这就是为什么我将它们的值默认为null.例如,这就是对象最初的样子:

{  
   "Foo":{  
      "P1":null,
      "P2":null,
      "P3":null,
      "P4":{  
         "P1":null,
         "P2":null,
         "P3":null,
      },
      "FooArray":[  
         {  
            "F1":null,
            "F2":null,
            "F3":null,
         }
      ]
   },
   "Bar":null
}
Run Code Online (Sandbox Code Playgroud)

然后,用户能够填补他们需要单独的领域,如Foo.P2Foo.P4.P1:

{  
   "Foo":{  
      "P1":null,
      "P2":"hello world",
      "P3":null,
      "P4":{  
         "P1":1,
         "P2":null,
         "P3":null,
      },
      "FooArray":[  
         {  
            "F1":null,
            "F2":null,
            "F3":null,
         }
      ]
   },
   "Bar":null
}
Run Code Online (Sandbox Code Playgroud)

意思是他们只关心这两个领域.现在我想将此模板(JObject)序列化为JSON字符串,但只想要填充的那些字段显示出来.所以我尝试了这个:

string json = JsonConvert.SerializeObject(template,
    new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    });
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我遇到了这个问题,并意识到null对象中的值是一个实际JToken类型,而不是真正的类型null,这是有道理的.但是,在这种非常特殊的情况下,我需要能够摆脱这些"未使用"的字段.我尝试手动迭代节点并删除它们,但这也不起作用.请注意,我使用的唯一托管类型是JObject …

c# json json.net nsjsonserialization

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

C#中两个项目的循环依赖

我在名为ProjectA(ConsoleApplication)和ProjectB(ClassLibrary)的解决方案中有两个项目.ProjectA引用了ProjectB.一般来说,ProjectA调用ProjectB中的方法来执行一些操作并将结果返回给ProjectA.但有时候,我需要ProjectB向ProjectA发送一些"附加"信息(更具体地说是调用Console.WriteLine()ProjectA中的方法).为了实现这一点,我需要在ProjectB中引用ProjectA,但是当我尝试这样做时,我收到以下错误:

A reference to ProjectA could not be added. Adding this project as a reference would cause a circular dependency.

我理解整个耦合概念,并且获取此消息确实有意义,但是,在某些情况下,我需要向ProjectA发送其他信息.有任何想法吗?

c# circular-dependency

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

使用WCF进行双向通信

我正在设计一个使用Windows Communication Foundation实现的客户端 - 服务器体系结构.在其中一个用例中,服务器需要请求客户端的状态,这意味着它需要SendStatus()客户端上调用该方法并询问其状态.我只是想知道这个用例是否可以使用WCF实现,而无需在客户端创建独立服务.我正在尝试避免套接字,因为客户端是后台服务,并且基本上始终连接到服务器.我知道WCF最终使用套接字进行通信,但我特意尝试使用WCF,因为这更像是一个概念证明.

我想到的一种解决方法是客户端可以SendClientStatus()服务器上调用该方法并每隔5秒左右发送一次状态.但是,这似乎不是一个好方法.任何帮助,将不胜感激.

c# wcf

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

Windows计划任务是否可以连接到休止端点?

我有一个用ASP.NET Web API编写的休息服务.

我想要一个计划任务连接到端点,如:

www.example.com/jobs/job1
Run Code Online (Sandbox Code Playgroud)

我希望能够设置每隔12小时说一次的间隔时间.

是否可以使用计划任务执行此操作?

我想避免创建一个Windows服务只是为了ping一个休息端点.

c# asp.net-mvc scheduled-tasks asp.net-web-api

10
推荐指数
2
解决办法
6595
查看次数

嵌套切换语句:架构设计问题

我正在开发一个项目,我的任务是添加一个高级搜索和过滤选项,允许用户通过指定任意数量的条件来查询Windows事件列表中的所需结果.

我们的想法是每个Windows事件日志中有一些特性,如LogName,Source,CreatedDate,Message,Number,等(的一部分FieldItem枚举).总共有4种 possbile数据类型:String,DateTime,Integral (Int/Long),和EventEntryType.这四种数据类型中的每一种都有自己的选择器操作数集合(SelectorOperator枚举的一部分).这是一张图片,可以让您更好地了解整体结构如何:

我最初实现这个想法是这样的:

 public static class SearchProvider
{
    public static List<EventLogItem> SearchInLogs(List<EventLogItem> currentLogs, SearchQuery query)
    {
        switch (query.JoinType)
        {
            case ConditionJoinType.All:
                return SearchAll(currentLogs, query);
            case ConditionJoinType.Any:
                return SearchAny(currentLogs, query);
            default:
                return null;
        }
    }

    private static List<EventLogItem> SearchAll(List<EventLogItem> currentLogs, SearchQuery query)
    {
        foreach (SearchCondition condition in query.Conditions)
        {
            switch (condition.FieldName)
            { …
Run Code Online (Sandbox Code Playgroud)

c#

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

Parallel.ForEach()更改模拟上下文

今天我们将新创建的ASP.NET应用程序部署到服务器,很快我们意识到存在一个与安全相关的奇怪问题导致应用程序崩溃.这是一个内部应用程序,我们使用Impersonation来管理用户访问资源的方式.但是,当用户尝试访问他们完全控制的文件夹时,应用程序会抛出"拒绝访问"异常.

事实上是一个异常,AggregateException并且被抛入一个方法,该方法Parallel.ForEach用于枚举列表和正文内部,它尝试访问该文件夹,但此时模拟上下文被更改,工作线程作为应用程序池运行身份,无权访问该文件夹,因此异常.

为了证实这一点,我查看了身体之前和之内的过程身份Parallel.ForEach:

string before = WindowsIdentity.GetCurrent().Name;
Debug.WriteLine("Before Loop: {0}", before);

Parallel.ForEach(myList, currentItem =>
{
    string inside = WindowsIdentity.GetCurrent().Name;
    Debug.WriteLine("Inside Loop: {0} (Worker Thread {1})", inside, Thread.CurrentThread.ManagedThreadId);
});
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,这就是打印出来的内容:

Before Loop: MyDomain\ImpersonatedUser

Inside Loop: NT AUTHORITY\SYSTEM (Worker Thread 8)
Inside Loop: MyDomain\ImpersonatedUser (Worker Thread 6)
Inside Loop: MyDomain\ImpersonatedUser (Worker Thread 7)
Inside Loop: NT AUTHORITY\SYSTEM (Worker Thread 9)
Inside Loop: NT AUTHORITY\SYSTEM (Worker Thread 10)
Inside Loop: MyDomain\ImpersonatedUser (Worker Thread 7)
Inside Loop: MyDomain\ImpersonatedUser …
Run Code Online (Sandbox Code Playgroud)

.net c# impersonation task-parallel-library parallel.foreach

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

用C读/写文件

我正在用C编写一个程序,基本上为给定的文件名列表创建一个存档文件.这与arlinux中的命令非常相似.这是存档文件的样子:

!<arch>
file1.txt/      1350248044  45503 13036 100660  28        `
hello
this is sample file 1
file2.txt/      1350512270  45503 13036 100660  72        `
hello
this is sample file 2
this file is a little larger than file1.txt
Run Code Online (Sandbox Code Playgroud)

但是我在尝试从存档中提取文件时遇到了困难.假设用户想要提取file1.txt.我们的想法是它应该获取文件名的索引/位置(在本例中为file1.txt),跳过58个字符以获取文件内容,读取内容并将其写入新文件.所以这是我的问题:

1)如何在归档文件中获取文件名的索引/位置?请注意,不允许使用重复的文件名,因此我不必担心有两个不同的内容.

2)如何在阅读文件时跳过多个字符(在本例中为58)?

3)如何判断文件内容何时结束?即我需要它来阅读内容并在file2.txt/标题前停止.

c unix-ar

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

无法在WPF中设置DataTrigger

我在主视图上有一个ComboBox和一个Button,我想在按钮上应用一个样式,这样当组合框索引设置为1时,按钮变为可见(最初它是隐藏的).这是我的XAML代码:

<Grid>
    <StackPanel Orientation="Vertical" Margin="10">
        <ComboBox Name="comboBox"/>

        <Button Name="myBtn" Content="Hello" Visibility="Hidden">
             <Button.Style>
                 <Style TargetType="{x:Type Button}">
                     <Style.Triggers>
                         <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
                             <Setter Property="Visibility" Value="Visible"/>
                          </DataTrigger>
                      </Style.Triggers>
                  </Style>
              </Button.Style>
         </Button>
     </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

有人在这里问了一个关于这个的问题,而且我做了几乎相同的事情,但它不起作用,即使索引更改为1,按钮仍然隐藏.最初在后面的代码中填充了comobox有2件物品.任何帮助表示赞赏.

c# wpf xaml styles datatrigger

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

使用fwrite()在C中逐字节写入文件

我正在尝试逐字节读取文件并将其写入另一个文件.我有这个代码:

if((file_to_write = fopen(file_to_read, "ab+")) != NULL){

  for(i=0; i<int_file_size; i++){
    curr_char = fgetc(arch_file);

    fwrite(curr_char, 1, sizeof(curr_char), file_to_write);
  }
}
Run Code Online (Sandbox Code Playgroud)

int_file_size我想要读取的字节数在哪里,arch_file是我正在读取的文件,并且curr_char是一个char指针.

但这不起作用.我在循环的第一次迭代中得到Segmentation fault(core dumped)错误.我很确定我的fwrite()语句有问题.任何帮助,将不胜感激.

c linux

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

Gforth将字符串值存储在变量中

我正在尝试将字符串值存储到变量中.要定义变量,我使用:

: define CREATE 0 , ;
define x
Run Code Online (Sandbox Code Playgroud)

我可以轻松地存储整数/浮点值来x使用

10 x !
Run Code Online (Sandbox Code Playgroud)

要么

10.0e x f!
Run Code Online (Sandbox Code Playgroud)

要访问它我使用@f@.现在我正在尝试存储一个字符串值:

s" hello world" x !
Run Code Online (Sandbox Code Playgroud)

这个问题是它将两个值推送到堆栈(因为它是一个计数字符串),但x !只会将项目存储在顶部,这是字符串的长度.这是危险的,因为堆栈内容可能已被x引用的时间修改,使得地址不直接低于长度(坏!),因此type会失败.所以我的问题是,有没有办法将两个值(地址和长度)存储到x?或者是否有不同的数据类型/操作数可以让我实现这一目标?

任何帮助表示赞赏.

string variables forth gforth

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