小编Con*_*ark的帖子

类似于 GSON 的 Json.NET 的松散输入选项

在 GSON 中,您可以反序列化为 JsonObject,这反过来又允许您访问 JsonElements 并调用 getAsString()、getAsInt() 等方法...

这对我的用例非常有用:我正在使用 JSON 序列化数据并通过网络发送它。数据与协议标识符一起发送,协议标识符告诉客户端如何处理数据。我不想为每种不同类型的协议创建一个类,因此反序列化为 JsonObject 允许我有很大的灵活性。

我在 C# 中找不到类似的方法来做到这一点。我想我需要滚动我自己的 JsonElement/Object/Array/Primitive 层次结构,但我真的不知道从哪里开始。这甚至是最好的方法吗?

我想要:

将 C# 中的 json 反序列化为一个结构,该结构允许我以特定类型访问数据,而无需为数据使用类“骨架”。

编辑:

我仅限于 .NET 3.5

c# serialization json gson

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

在Erlang中实现高效的二进制搜索

PS这是我第一次进入SO,如果我做错了请告诉我,我会尽力解决.我花了很多时间试图修复这个算法的实现,而且我的智慧结束了!

我目前正在上课,要求在3种基本上不同的语言中实现相同二进制搜索算法的3种实现.对于他们中的一个,我决定采取艰难的方式,并在Erlang拍摄.这是我的代码:

-export(main/1).

main(_) ->
    io:format("Running trials... ~n", []),
    N = [2 bsl (2 * X + 6) || X <- lists:seq(0, 7)],
    lists:foreach(fun(X) -> io:format("~p: ~p ~n", [X, time_search(X)]) end, N).

time_search(Size) ->
    A = list_to_tuple(create_list(Size)),
    Iterations = 2000000,
    time_search(A, Size + 1, 0, Iterations) / Iterations.

time_search(_, _, Sum, 0) -> Sum;
time_search(A, Key, Sum, IterationNum) ->
    Before = now(),
    bin_search(A, Key),
    time_search(A, Key, Sum + timer:now_diff(now(), Before), IterationNum - 1).

create_list(Size) -> lists:seq(1, Size).

bin_search(A, Key) -> …
Run Code Online (Sandbox Code Playgroud)

erlang binary-search

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

为什么这种用python F-string插值包装带引号?

有问题的代码:

a = 'test'

# 1)
print(f'{a}') # test

# 2)
print(f'{ {a} }') # {'test'}

# 3)
print(f'{{ {a} }}') # {test}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么案例2会打印这些引号?

我没有在文档中明确找到任何内容.我发现最接近细节的是在这个功能的PEP中:

(F字符串的语法)

f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '
Run Code Online (Sandbox Code Playgroud)

然后使用格式说明符作为参数,使用格式协议格式化表达式.在构建f-string的值时使用结果值.

我想a用一些格式化程序格式化了它的值,因为数据类型是一个字符串,所以用引号括起来.然后将此结果返回到周围的F字符串格式化实例.

这个假设是否正确?是否有其他地方更清楚地记录这一点?

python string specifications string-interpolation python-3.6

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