小编Jaz*_*mov的帖子

JContainer,JObject,JToken和Linq混淆

我无法理解时使用JContainer,JObjectJToken.我理解由"标准" JObject组成的JProperties,它JToken是所有JToken类型的基本抽象类,但我不明白JContainer.

我正在使用C#,我刚买了LinqPad Pro 5.

我在一个文件中有一个JSON数据源,所以我使用这个语句成功地反序列化了该文件的内容:

string json;
using (StreamReader reader = new StreamReader(@"myjsonfile.json"))
{
    json = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

那时,我接受JSON字符串对象并将其反序列化为JObject(这可能是我的错误 - 也许我需要创建jsonWork一个JTokenJContainer?):

JObject jsonWork = (JObject)JsonConvert.DeserializeObject(json);
Run Code Online (Sandbox Code Playgroud)

在我的JSON数据(由JSON表示的字符串)中,我有三个对象 - 顶级对象看起来类似于:

{
  "Object1" : { ... },
  "Object2" : { ... },
  "Object3" : { ... }
}
Run Code Online (Sandbox Code Playgroud)

每个对象都由各种标记(数组,字符串,其他对象等)组成,因此它是动态JSON.(我使用省略号作为占位符,而不是用大量JSON数据混淆这个问题.)

我要处理"Object1","Object2""Object3"单独使用LINQ,但是.所以,理想情况下,我想要这样的事情:

// these lines …
Run Code Online (Sandbox Code Playgroud)

c# linq json json.net

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

在Visual Studio 2017中创建安装程序/ MSI安装程序

我在Visual Studio Pro 2017(VB.NET)中编写了一个outlook加载项VSTO.我发布了它创建了一个setup.exe但是我想创建一个适当的安装程序,可以在本地复制文件,并且可以静默运行等.

我该怎么做呢?当我去创建新项目时,没有安装程序项目选项.

谢谢

installer visual-studio-2017

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

JSON.NET:为什么要使用JToken?

作为我的问题的后续跟进: JSON.NET:从JProperty Value获取JObject ...

我阅读了链接并消化了上述评论和建议.现在我想知道:有没有一个很好的理由为什么没有"直接"(即简单)方法将JProperty对象的值转换为JObject?到达一个JToken似乎需要做很多工作,然后必须构建if语句等.这不是抱怨额外的工作; 相反,它承认我仍然认为我不明白JToken的真正目的.有一次,所有FedEx软件包首先被路由到孟菲斯:似乎所有对象都可以/应该首先转到JToken然后被分配到实际的目标对象类型.这是一种思考方式吗?

换句话说,是否有充分的理由使用JToken - 或者仅仅是因为许多其他函数返回JToken然后你必须处理它?JSON.NET手册提供了将JToken转换为其他类型的方法(http://www.newtonsoft.com/json/help/html/Operators_T_Newtonsoft_Json_Linq_JToken.htm),但没有提到从JToken转到JObject ...

我发现JObject通常是我想要的,以便使用JSON并从JSON映射到我的.NET类,然后再返回 - 以及执行许多其他操作.我仍然想知道使用JToken对象的令人信服的理由是什么?

json.net

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

Maui 应用程序找不到启动屏幕资源

我的 Maui 应用程序(最新版本,.NET 6,VS 17.4 Preview 1)中的 Package.appxmanifest 无法“找到”我在启动屏幕字段中指定的启动屏幕文件,从而导致 DEP0700 错误(见下文)。

Package.appxmanifest 的 Visual Assets 选项卡如下所示:

在此输入图像描述

Resources\Splash\mysplash.png 文件作为 mysplash.svg 位于磁盘上:

在此输入图像描述

据我了解,Maui 在编译期间将 svg 文件转换为 png 文件,因此应用程序清单应引用 png 文件。

作为记录,我还在重新编译之前在启动屏幕字段中尝试了这些路径/文件名引用,但它们都不起作用:

Resources\Splash\mysplash.png 
Splash\mysplash.png 
mysplash.png 
Resources\Splash\mysplash.svg 
Splash\mysplash.svg
mysplash.svg
Run Code Online (Sandbox Code Playgroud)

我在构建时得到这个:

DEP0700: Registration of the app failed. [0x80073CF6] AppxManifest.xml(33,27): error 0x80070003: Cannot install or update package 0ecaf7bf-457c-450a-94a5-181406568f05_9zz4h110yvjzm because the splash screen image [mysplash.png] cannot be located. Verify that the package contains an image that can be used as a splash screen for the application, and …
Run Code Online (Sandbox Code Playgroud)

maui

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

适用于Visual Studio 2015 Update 1的MicroUpdate 1.1

在全新的Windows 7 Ultimate 64位计算机上从其MSDN下载的.ISO映像安装Visual Studio 2015 Enterprise后,安装程序最终显示以下错误消息:

用于Visual Studio 2015 Update 1的MicroUpdate 1.1:此产品未成功下载:下载文件上的签名验证失败.网址: ' http://go.microsoft.com/fwlink/?prd=12514&pver=Dev14&sbp=d14vsuldr&plcid=0x409&clcid=0x409&ar=24723.02&sar=S80_RCPrep&o1=enu_MicroUpdate1.1_iOOB&o2=enu&o3=patch\kb3110221&O4 = VS14-KB3110221.exe'

有趣的是,如果您导航到该URL,则该位置没有exe.

然后,我下载了Visual Studio 2015 Update 1的.ISO映像,并确认了其SHA1值.我在我的系统上运行它,并出现上面相同的错误消息.

什么是MicroUpdate 1.1,为什么没有应用?在撰写本文时,没有关于此特定问题的Google条目,这让我有点沮丧.

visual-studio-2015

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

ASP.NET MVC 5模型绑定编辑视图

我无法想出一个最好用口头和一些代码描述的问题的解决方案.我正在使用VS 2013,MVC 5和EF6代码优先; 我还使用MvcControllerWithContext脚手架,它生成一个支持CRUD操作的控制器和视图.

简单地说,我有一个包含CreatedDate值的简单模型:

public class WarrantyModel
{
    [Key]
    public int Id { get; set; }
    public string Description { get; set; }
    DateTime CreatedDate { get; set; }
    DateTime LastModifiedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

包含的MVC脚手架为其索引,创建,删除,详细信息和编辑视图使用相同的模型.我在'创建'视图中创建CreatedDate; 我希望它在"编辑"视图中,因为我不希望在编辑视图发回服务器时更改其值,并且我不希望任何人在表单发布期间能够篡改该值.

理想情况下,我不希望CreatedDate进入"编辑"视图.我已经在模型的CreatedDate属性上找到了一些属性(例如,[ScaffoldColumn(false)]),这些属性阻止它出现在Edit视图中,但随后我在回发时遇到绑定错误,因为CreatedDate结束了值为1/1/0001 12:00:00 AM.这是因为编辑视图没有将值传回给CreatedDate字段的控制器.

我不想实现需要任何SQL Server更改的解决方案,例如在包含CreatedDate值的表上添加触发器.如果我想进行快速修复,我会在呈现编辑视图之前存储CreatedDate(服务器端),然后在回发时恢复CreatedDate - 这样我就可以更改1/1/0001日期在渲染视图之前从数据库中提取到CreatedDate EF6.这样,我可以将CreatedDate作为隐藏的表单字段发送,然后在回发后覆盖控制器中的值,但我没有一个很好的策略来存储服务器端值(我不想使用Session变量或者ViewBag).

我看着使用[Bind(Exclude ="CreatedDate")],但这没有帮助.

我的控制器的编辑回发函数中的代码如下所示:

public ActionResult Edit([Bind(Include="Id,Description,CreatedDate,LastModifiedDate")] WarrantyModel warrantymodel)
{
    if (ModelState.IsValid)
    {
        db.Entry(warrantymodel).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(warrantymodel);
}
Run Code Online (Sandbox Code Playgroud)

我以为我可能能够检查if上面的块中的db.Entry(warrantymodel)对象并在OriginalValue中检查CreatedDate,但是当我尝试访问该值时(如下所示),我得到类型'System'的异常.InvalidOperationException":

var originalCreatedDate = db.Entry(warrantymodel).Property("CreatedDate").OriginalValue; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model-binding scaffold asp.net-mvc-5

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

在Visual Studio 2015中观看图标和项目

当我将鼠标悬停在C#代码中的JObject变量上时,会看到一个监视窗口弹出.当我扩展它时,我看到以下图像:

在此输入图像描述

问题

  1. ChildrenTokens旁边的蓝色符号/图标表示什么?

  2. 这些符号/图标的完整列表在哪里?

  3. 我们都看到在观察窗口中列出的ChildrenTokens.但是,当我在代码中并尝试访问ChildrenTokens属性时,intellisense不会显示它.为什么?

谢谢.

c# visual-studio-debugging visual-studio-2015

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

从分层JSON中挑选出简单属性

*尽管其他用户对我的标题进行了编辑,但我正在寻找一种使用来自C#*的JSON.NET库的解决方案

包含psuedocode的回复很好!:)

我正在尝试使用JSON数据集提供的分层数据.我正在使用C#和JSON.NET.我很乐意使用Linq,尤其是Linq for JSON.NET,如果有帮助的话.否则,使用非Linq C#/ JSON.NET就可以了.

理想情况下,我试图优雅地完成两件事:

  1. 我想提取代表每个分支的JSON和该分支自己的属性 - 而不是它的子(嵌套)分支对象(我稍后会详细解释).

  2. 我想在创建分支对象时跟踪父节点.

有关进一步的考虑,请参阅以下JSON摘录:

{
  "Branch1": {
    "Prop1A" : "1A",
    "Prop1B" : "1B",
    "Prop1C" : "1C",
    "Branch2" : {
      "Prop2A" : "2A",
      "Prop2B" : "2B",
      "Prop2C" : "2C",
      "Branch3" : {
        "Prop3A" : "3A",
        "Prop3B" : "3B",
        "Prop3C" : "3C"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

与目标1相关(从上面): 鉴于JSON由嵌套的JSON对象组成,我想只挑选每个分支的简单(字符串)属性.例如,我想提取仅包含Prop1A,Prop1B和Prop1C属性的Branch1的JSON.然后我想提取仅包含Prop2A,Prop2B和Prop2C属性等的Branch2的JSON.我意识到我可以将整个JSON表示为JSON.NET JToken对象,然后遍历其Children()并仅查看对于JTokenType.Property类型,但也许有一种更优雅的方法可以使用Linq快速选择属性类型...?最后,我将有三个单独的JSON对象,如下所示:

JSON对象1:

{
  "Prop1A" : "1A",
  "Prop1B" : "1B",
  "Prop1C" : "1C"
}
Run Code Online (Sandbox Code Playgroud)

JSON对象2:

{
  "Prop2A" : "2A",
  "Prop2B" : "2B",
  "Prop2C" : "2C"
} …
Run Code Online (Sandbox Code Playgroud)

c# json.net

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

如何将 Visual Studio 2017 更新到最新版本?

我习惯于在 Help About 中看到更新选项。如何将 Visual Studio 2017 IDE 更新到最新版本?

visual-studio-2017

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

如何将Microsoft Word设置为VB6表单的所有者?

我们正在创建一个Microsoft Word的加载项.在这个加载项中有一个无模式表单,我们也根据需要将其设置为Top Most表单.当我们最小化Microsoft Word应用程序时,无模式形式不会最小化.如果我们能够将MS Word设置为此表单的所有者,则此问题将得到解决.请告诉我一种方法.

这是我目前用来加载表单的代码.

Dim Test As Long 

With frmSelectStyle
 .aaInitialize SelectStyleDlg:=Me
 .Show vbModeless
End With

Test = SetTopMostWindow(frmSelectStyle.hwnd, True)
Run Code Online (Sandbox Code Playgroud)

我知道我们可以将所有者设置为表格,如下所示.

frmSelectStyle.Show vbModeless , frmMain 
Run Code Online (Sandbox Code Playgroud)

但就我而言,我需要将MS Word设置为所有者.请帮我.

vb6 ms-word

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