如果您反思过来,WindowsBase.dll > MS.Internal.DoubleUtil.AreClose(...)您将获得以下代码:
public static bool AreClose(double value1, double value2)
{
if (value1 == value2)
{
return true;
}
double num2 = ((Math.Abs(value1) + Math.Abs(value2)) + 10.0) * 2.2204460492503131E-16;
double num = value1 - value2;
return ((-num2 < num) && (num2 > num));
}
Run Code Online (Sandbox Code Playgroud)
我试图理解两件不同的事情:
他们在哪里提出了num2的公式?我想我只是不明白第一次添加值的重要性,10.0其次将所有结果乘以这个数字2.2204460492503131E-16.任何人都知道为什么这是使用的公式?
那里的退货声明有什么意义?似乎默认情况下,如果num2大于num而不是num2的否定值,则应小于num.也许我在这里遗漏了一些东西,但这似乎是多余的.对我而言,就像检查5是否大于3以及-5是否小于3(作为示例).
如果我有一个CSON模型类,JSON.net使用它来绑定序列化JSON字符串中的数据,有没有办法可以从该类创建一个查询字符串以便发出初始请求?
模型类示例:
public class model
{
[JsonProperty(PropertyName = "id")]
public long ID { get; set; }
[JsonProperty(PropertyName = "some_string")]
public string SomeString {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
查询字符串示例:
baseUrl + uri + "&fields=id,some_string" + token
Run Code Online (Sandbox Code Playgroud)
所以我想要做的就是从模型对象中收集"id"和"some_string",这样我就可以动态地创建一个"&fields"参数.谢谢!
我很难搞清楚如何将json对象数组添加到现有数据库中JObject.假设我JObject只有"已修改"属性,并且我想添加另一个属性"IntersectGroups",其中包含一个json对象数组,我该怎么做?我有一个JObject[]当我序列化它是完全符合我要求的格式,但我正在寻找这样的东西:mainJObject.Add("IntersectGroups", myJObjectArray)
这是我序列化时想要的最终json的一个例子.
...
"Modified": "2012-11-26T10:21:04.693",
"IntersectGroups": [
{
"Id": 1004,
"UserId": 20003,
"GroupId": 1001,
"Admin": false,
"Expires": "1900-01-01T00:00:00"
},
{
"Id": 1003,
"UserId": 20003,
"GroupId": 1000,
"Admin": false,
"Expires": "1900-01-01T00:00:00"
}
]
...
Run Code Online (Sandbox Code Playgroud)
UPDATE
我的最终解决方案是使用JArray对象.JArray是一个JContainer,它是一个JToken,可以添加到JObject中.我的问题是我试图使用JObject [],这不是一个有效的JToken
我正在尝试阅读我的JSON结果.
这是我的RootObject
public class RootObject
{
public int id { get; set; }
public bool is_default { get; set; }
public string name { get; set; }
public int quantity { get; set; }
public string stock { get; set; }
public string unit_cost { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的JSON结果
[{"id": 3636, "is_default": true, "name": "Unit", "quantity": 1, "stock": "100000.00", "unit_cost": "0"}, {"id": 4592, "is_default": false, "name": "Bundle", "quantity": 5, "stock": "100000.00", "unit_cost": "0"}]
Run Code Online (Sandbox Code Playgroud)
这是我读取结果的代码
public static RootObject GetItems(string user, …Run Code Online (Sandbox Code Playgroud) 我有一个我不用多个构造函数控制的类型,相当于这个:
public class MyClass
{
private readonly string _property;
private MyClass()
{
Console.WriteLine("We don't want this one to be called.");
}
public MyClass(string property)
{
_property = property;
}
public MyClass(object obj) : this(obj.ToString()) {}
public string Property
{
get { return _property; }
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试反序列化它时,将调用私有无参数构造函数,并且永远不会设置该属性.考试:
[Test]
public void MyClassSerializes()
{
MyClass expected = new MyClass("test");
string output = JsonConvert.SerializeObject(expected);
MyClass actual = JsonConvert.DeserializeObject<MyClass>(output);
Assert.AreEqual(expected.Property, actual.Property);
}
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
We don't want this one to be called.
Expected: "test"
But …Run Code Online (Sandbox Code Playgroud) 我创建了一个PagedResult<T> : List<T>包含一些添加成员的类,以便使用我们的一个组件.但是,当我运行json反序列化器时,它只序列化列表.如果我的标记与派生类[JsonObject]和[JsonProperty]然后它只会序列化派生类的成员,而不是名单.我如何得到两者?
我有一个类定义如下的场景:
class MyObject
{
public DataDictionary MyObjectData { get; set; }
public bool ShouldSerializeMyObjectData() { return true; }
public bool ShouldDeserializeMyObjectData() { return false; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用JSON.net序列化/反序列化该类时,它会考虑ShouldSerialize,但不会考虑ShouldDeserialize.
根据文档,两者都应该像我猜的那样工作.有什么特别值得我知道的吗?更一般地说,我应该如何处理我想要序列化属性但不反序列化它的场景?
我正在使用,Json.NET 8.0如果这很重要.
谢谢你的帮助.
我有一个对象,其中包含几个属性,这些属性是字符串列表List<String>或字符串字典Dictionary<string,string>.我想使用Json.net将对象序列化为json,我希望生成最少量的文本.
我使用DefaultValueHandling和NullValueHandling将默认值设置为字符串和整数.但是,如果将DefaultValueHandling初始化为空List<String>或Dictionary<string,string>?,则如何定义DefaultValueHandling以忽略序列化输出中的属性?
一些示例输出是:
{
"Value1": "my value",
"Value2": 3,
"List1": [],
"List2": []
}
Run Code Online (Sandbox Code Playgroud)
我想得到一个忽略上例中两个列表的结果,因为它们被设置为空列表的默认值.
任何帮助将不胜感激
我在我的应用程序中使用PhantomJS + Selenium.当我初始化PhantomJS时,屏幕上会弹出一个控制台.我想在弹出之前隐藏这个控制台.我找了一个答案,我发现了这个:
var service = PhantomJSDriverService.CreateDefaultService(Environment.CurrentDirectory);
service.WebSecurity = false;
service.HideCommandPromptWindow = true;
var driver = new PhantomJSDriver(service);
Run Code Online (Sandbox Code Playgroud)
上面的代码隐藏了控制台,但问题是当控制台被隐藏时,我的Windows应用程序失去了焦点.因此,它在PhantomJS控制台工作时停止工作.我需要隐藏控制台并让我的应用程序同时使用PhantomJS.
有谁知道我该怎么做?
我有一些JSON:
{
"foo" : [
{ "bar" : "baz" },
{ "bar" : "qux" }
]
}
Run Code Online (Sandbox Code Playgroud)
我想将其反序列化为一个集合.我已经定义了这个类:
public class Foo
{
public string bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码不起作用:
JsonConvert.DeserializeObject<List<Foo>>(jsonString);
Run Code Online (Sandbox Code Playgroud)
如何反序列化我的JSON?