在 GSON 中,您可以反序列化为 JsonObject,这反过来又允许您访问 JsonElements 并调用 getAsString()、getAsInt() 等方法...
这对我的用例非常有用:我正在使用 JSON 序列化数据并通过网络发送它。数据与协议标识符一起发送,协议标识符告诉客户端如何处理数据。我不想为每种不同类型的协议创建一个类,因此反序列化为 JsonObject 允许我有很大的灵活性。
我在 C# 中找不到类似的方法来做到这一点。我想我需要滚动我自己的 JsonElement/Object/Array/Primitive 层次结构,但我真的不知道从哪里开始。这甚至是最好的方法吗?
我想要:
将 C# 中的 json 反序列化为一个结构,该结构允许我以特定类型访问数据,而无需为数据使用类“骨架”。
编辑:
我仅限于 .NET 3.5
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) 有问题的代码:
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