我是使用JSON数据的新手.
我正在从Web服务中读取数据.发回的查询数据如下:
[["B02001_001E","NAME","state"],
["4712651","Alabama","01"],
["691189","Alaska","02"],
["6246816","Arizona","04"],
["18511620","Florida","12"],
["9468815","Georgia","13"],
["1333591","Hawaii","15"],
["1526797","Idaho","16"],
["3762322","Puerto Rico","72"]]
Run Code Online (Sandbox Code Playgroud)
有没有办法以这样的方式反序列化这些数据,即在没有我首先定义对象是什么的情况下生成基础对象?在上面的示例中,对象由第一行定义:
["B02001_001E","NAME","state"],
Run Code Online (Sandbox Code Playgroud)
通常,Web服务将返回格式化为二维JSON数组的查询数据,其中第一行提供列名,后续行提供数据值.
我正在测试一个属于层次结构的类.我一直在用测试对象设置我的测试类,并且PrivateObject
允许访问该对象.当我尝试访问父类的私有成员时,我遇到异常.
到目前为止,我发现的唯一解决方法是将PrivateType
指定基类传递给PrivateObject
构造函数,但是它不适用于子类的私有成员.
有没有办法可以做到这一点,也许是通过在Private对象的Get*方法上使用绑定flags参数?
我尝试使用自动生成的Accessor类(右键单击主类,Create Private Accessor).然而,情况更糟:它显示了我可以读取的属性,但它抛出与PrivateObject相同的异常,并且没有其他选项可以使用(绑定标志或诸如此类)来修复异常.
这是我的示例测试代码.我希望有一些方法来构造和使用PrivateObject来检索这两个字段.
public class BaseClass
{
private int one = 1;
}
public class SubClass : BaseClass
{
private int two = 2;
}
[TestClass]
public class UnitTest1
{
BindingFlags flags = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
[TestMethod]
public void TestMethod1()
{
SubClass test = new SubClass();
PrivateObject priv = new PrivateObject(test);
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("one", flags)); // System.MissingMethodException: Method 'PrivateObjectTester.SubClass.one' not found.
Assert.AreNotEqual<int>(0, (int)priv.GetFieldOrProperty("two", flags));
}
[TestMethod]
public …
Run Code Online (Sandbox Code Playgroud) 如何在c ++中执行命令行"asterisk -rx"reload""?请帮忙.我需要一个例子.我正在使用ubuntu服务器,我想从用户(在webservice内)执行此命令行.
需要帮助欣赏
(我知道,这是一个非常漫长的问题.到目前为止,我试图将问题与我的调查分开,所以阅读起来会稍微容易一点.)
我正在使用MSTest.exe运行我的单元测试.偶尔,我看到这个测试错误:
在单个单元测试方法上:"在测试运行时代理进程已停止."
在整个测试运行中:
One of the background threads threw exception: System.NullReferenceException: Object reference not set to an instance of an object. at System.Runtime.InteropServices.Marshal.ReleaseComObject(Object o) at System.Management.Instrumentation.MetaDataInfo.Dispose() at System.Management.Instrumentation.MetaDataInfo.Finalize()
所以,这就是我认为我需要做的事情:我需要追踪导致MetaDataInfo错误的原因,但我正在画一个空白.我的单元测试套件需要半个多小时才能运行,并且每次都不会发生错误,所以很难让它重现.
有没有人在运行单元测试中看到过这种类型的故障?您是否能够将其追踪到特定组件?
被测代码是C#,C++/CLI和一些非托管C++代码的混合体.非托管C++仅用于C++/CLI,而不是直接来自单元测试.单元测试都是C#.
正在测试的代码将在独立的Windows服务中运行,因此没有来自ASP.net或类似的任何复杂功能.在测试代码中,有线程启动和停止,网络通信和文件I/O到本地硬盘驱动器.
我花了一些时间在Windows 7机器上挖掘System.Management程序集的多个版本,我在System.Management中找到了MetaDataInfo类,它位于我的Windows目录中.(Program Files\Reference Assemblies下的版本要小得多,并且没有MetaDataInfo类.)
使用Reflector检查这个程序集,我发现MetaDataInfo.Dispose()中似乎是一个明显的错误:
// From class System.Management.Instrumentation.MetaDataInfo:
public void Dispose()
{
if (this.importInterface == null) // <---- Should be "!="
{
Marshal.ReleaseComObject(this.importInterface);
}
this.importInterface = null;
GC.SuppressFinalize(this);
}
Run Code Online (Sandbox Code Playgroud)
有了这个'if'语句,如果存在,MetaDataInfo将泄漏COM对象,否则抛出NullReferenceException.我在Microsoft Connect上报告了此问题:https://connect.microsoft.com/VisualStudio/feedback/details/779328/
使用反射器,我能够找到MetaDataInfo类的所有用途.(这是一个内部类,所以只搜索程序集应该是一个完整的列表.)它只使用了一个地方:
public static Guid GetMvid(Assembly assembly)
{
using (MetaDataInfo info …
Run Code Online (Sandbox Code Playgroud) 我们有一个大型的.NET解决方案,其中包含相互引用的C#和C++/CLI项目.我们还有几个单元测试项目.我们最近从Visual Studio 2010和.NET 4.0升级到Visual Studio 4.5和.NET 4.5,现在当我们尝试运行单元测试时,在测试期间加载某些DLL似乎存在问题.
问题似乎发生,因为单元测试是在单独的AppDomain上执行的.单元测试过程(例如nunit-agent.exe)创建一个新的AppDomain,AppBase设置为测试项目的位置,但是根据Fusion Log,一些DLL加载了nunit的可执行文件目录作为AppBase而不是AppDomain的AppBase .
我设法用一个更简单的场景重现问题,它创建了一个新的AppDomain并尝试在那里运行测试.这是它的外观(我更改了单元测试类的名称,方法和dll的位置以保护无辜者):
class Program
{
static void Main(string[] args)
{
var setup = new AppDomainSetup {
ApplicationBase = "C:\\DirectoryOfMyUnitTestDll\\"
};
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, setup);
ObjectHandle handle = Activator.CreateInstanceFrom(domain, typeof(TestRunner).Assembly.CodeBase, typeof(TestRunner).FullName);
TestRunner runner = (TestRunner)handle.Unwrap();
runner.Run();
AppDomain.Unload(domain);
}
}
public class TestRunner : MarshalByRefObject
{
public void Run()
{
try
{
HtmlTransformerUnitTest test = new HtmlTransformerUnitTest();
test.SetUp();
test.Transform_HttpEquiv_Refresh_Timeout();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试执行单元测试时遇到的异常.正如您所看到的,问题发生在C++ dll初始化并尝试加载C#dll(我将所涉及的DLL的名称更改为CPlusPlusDll和CSharpDll):
System.TypeInitializationException: …
在C#中,有三种使用指令:
using System; // Specify Namespace
using Diag = System.Diagnostics; // Specify Namespace Alias
using DBG = System.Diagnostics.Debug; // Specify Class Alias
Run Code Online (Sandbox Code Playgroud)
在C++/CLI中,我知道前两个的等价物:
using namespace System;
namespace Diag = System::Diagnostics;
Run Code Online (Sandbox Code Playgroud)
有没有办法在C++/CLI中做第三个?
做的namespace DBG = System::Diagnostics::Debug;
给error C2879: 'System::Diagnostics::Debug' : only an existing namespace can be given an alternative name by a namespace alias definition
我提出的唯一的交替是#define DBG System::Diagnostics::Debug
,但我更喜欢正确的使用指令,如果可用的话.
我正在阅读一些代码,发现如下内容:
typedef union {
int int32;
int boolean;
time_t date;
char *string;
union {
struct foo *a;
struct foo *b;
struct foo *c;
};
} type_t;
Run Code Online (Sandbox Code Playgroud)
从语法的角度来看,内部联合{}可以被移除并且在外部联合{}内直接具有*a,*b和*c.那无名嵌入式联盟的目的是什么?
我有一个申请。如果该应用程序在 15 分钟内未使用,则需要关闭所有其他应用程序(强制关闭)并且计时器再次启动。我不想这样做让 Windows 7 崩溃。到目前为止我有以下内容:
Process me = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
if (p.Id != me.Id
&& p.ProcessName != "winlogon.exe"
&& p.ProcessName != "explorer.exe"
&& p.ProcessName != "System Idle Process"
&& p.ProcessName != "taskmgr.exe"
&& p.ProcessName != "spoolsv.exe"
&& p.ProcessName != "csrss.exe"
&& p.ProcessName != "smss.exe"
&& p.ProcessName != "svchost.exe "
&& p.ProcessName != "services.exe"
)
{
p.Kill();
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是 Windows 死机了(蓝屏)。有什么方法可以关闭所有正在使用的进程,然后希望 Windows 能够生存下来。
简短版本:根据我访问https服务器的方式,我看到的SSL证书链有所不同。这是怎么回事,在这种情况下如何验证证书?
我正在尝试使用libcurl来验证SSL连接的证书。我要连接的服务器是Amazon S3。
当我在Firefox中访问Amazon S3时,将获得以下证书链:
当我通过OpenSSL命令行工具访问相同的URL时,将获得以下证书链:
“ * .s3.amazonaws.com”和“ VeriSign 3类安全服务器CA-G3”证书似乎是相同的,但此后的证书是不同的!两个链中都将其命名为“ VeriSign 3类公共主要证书颁发机构-G5”,但是证书序列号不同。(其他信息也不同;如果需要更长的转储,请告诉我。)
我相信这种差异是我无法获取libcurl来验证SSL证书的原因。序列号为“ 18:DA:D1 ...”的证书在我的CACERT.PEM文件中,而序列号为“ 35:97:31 ...”的证书不在。
显然,简单的解决方法是将证书“ 35:97:31 ...”添加到我的CACERT.PEM文件中,但我想在此处进行正确的更改,而不仅仅是快速修复。
我正在使用带有OpenSSL的libcurl从Amazon S3下载。Libcurl返回“ SSL证书问题:无法获取本地发行者证书”,这意味着我的CACERT.PEM文件中未列出根证书。(我使用的是从curl的网站下载的文件,该文件是从Mozilla的证书存储转换而来的。)我能够验证其他SSL连接上的证书,因此我知道我的libcurl设置正确。
为了查看发生了什么以及为什么证书没有通过验证,我在Firefox中提取了相同的URL。Firefox没有显示任何SSL证书警告。这是Firefox显示的认证路径。我的CACERT.PEM文件中列出了根证书“ VeriSign 3类公共主要证书颁发机构-G5”,并且证书的序列号与屏幕快照中显示的序列号匹配。
这是链中所有三个证书的序列号:
在不同的平台(不同的操作系统,不同版本的OpenSSL等)上,我尝试使用OpenSSL命令行工具访问相同的URL,并且获得了不同的认证路径!
$ openssl s_client -showcerts -connect stackoverflowtest.s3.amazonaws.com:443 已连接(00000003) depth = 3 C =美国,O =“ VeriSign,Inc。”,OU …
我想得到一列datagridview的总和,并在文本框中显示.每次输入后,应动态更改总和.为此,我使用文本框的textChanged事件但是当输入时,它不显示任何结果.我想在文本框中动态获取结果.我想避免使用按钮来求和.
这是textbox textChanged事件的一段代码:
private void textBox9_TextChanged(object sender, EventArgs e)
{
double sum = 0;
for (int i = 0; i < dataGridView2.Rows.Count; ++i)
{
sum += Convert.ToDouble(dataGridView2.Rows[i].Cells[5].Value);
}
textBox9.Text = sum.ToString();
}
Run Code Online (Sandbox Code Playgroud)