下面的代码生成输出{"error_message":null,"status":"InvalidRequest"},我希望将其输出为{"error_message":null,"status":"INVALID_REQUEST"}
简而言之,我想知道PropertyName在使用JSON.NET进行序列化时如何尊重属性?
void Main()
{
var payload = new GooglePlacesPayload();
payload.Status = StatusCode.InvalidRequest;
JsonConvert.SerializeObject(payload).Dump();
}
public class GooglePlacesPayload
{
[JsonProperty(PropertyName = "error_message")]
public string ErrorMessage { get; set; }
[JsonProperty(PropertyName = "status")]
[JsonConverter(typeof(StringEnumConverter))]
public StatusCode Status { get; set; }
}
[Flags]
public enum StatusCode
{
// reference https://developers.google.com/maps/premium/previous-licenses/articles/usage-limits#limitexceeded
// reference https://developers.google.com/places/web-service/search#PlaceSearchStatusCodes
None = 0,
// indicates that no errors occurred; the place was successfully detected and at least one result was returned.
[JsonProperty(PropertyName = …Run Code Online (Sandbox Code Playgroud) 我刚刚开始尝试了解有关 .Net VM 基础的更多信息,但立即就被某些事情迷惑了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但现在我正在阅读有关这种名为 Boo 的语言,显然早在 DLR 存在之前它就已经具有动态功能。所以,
1)这怎么可能?
2) DLR 在方程式中添加了什么?
3) 像 Boo 这样的语言通过在 DLR 中重新实现自身会获得什么好处吗?
从我在这里和那里收集到的信息来看,DLR 似乎来自 IronPython,当时他们提取了 .Net 中 DL 支持所需的所有内容,并将其置于可重用的形式。所以我猜测 DLR 没什么特别的,只是一些帮助 Microsoft.Scripting.dll 中的动态对象的库,但如果你有时间的话,你可以自己编写代码,这我猜 Boo 身上发生了什么事?然后对于 2 和 3,我想 DLR 的通用性和可重用性将允许任何未来的 DLR 改进自动继承,但如果您已经做出了您的计划,则没有迫切的“需要”重新实施使用 DLR自己的自定义运行时?或者 DLR 是否有一些秘密的 MS 技术,使其比我们在 .Net 上所做的任何事情都更好?
4) DLR 真的是一个运行时还是只是一组库?(到底什么是运行时?我可能需要学习更多编译器理论,然后才能理解这个问题的答案,或者它是否是一个有意义的问题。忽略这个问题。或者不要。)
5) IronPython 编译是如何工作的?它会编译为新的动态版本的 CIL,还是只是在包含程序文本的字符串前面添加“ironpython.exe”命令?嗯,如果dynamic是C#中的关键字,那么一定有一个动态版本的CIL,对吧?那么.Net如何知道在CIL上使用CLR还是DLR呢?
6) JVM 的 DaVinci 项目有什么不同吗?看起来它是 JVM 本身的实际重新实现。这种方法有什么影响?我猜性能会有巨大的提升,但还有其他什么吗?MS有什么理由不走这条路?
7) DLR 是否会让 Boo 在制作 DSL 方面变得有些过时了?
我正在尝试编写一个 WCF 服务来响应 ajax 请求,但是当它尝试反序列化时出现一个奇怪的错误。
这是jQuery:
$.ajax({
type: 'POST',
url: 'http://localhost:4385/Service.svc/MyMethod',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({folder:"test", name:"test"})
});
Run Code Online (Sandbox Code Playgroud)
这是 WCF 服务定义:
[OperationContract]
[WebInvoke(UriTemplate = "/MyMethod",
Method = "*", //Need to accept POST and OPTIONS
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string[] MyMethod(string folder, string name);
Run Code Online (Sandbox Code Playgroud)
我得到一个SerializationException说法:“OperationFormatter 无法反序列化消息中的任何信息,因为消息是空的(IsEmpty = true)。”
它发生在System.ServiceModel.Dispatcher.PrimitiveOperationFormatter.DeserializeRequest指令的方法中00000108 mov dword ptr [ebp-18h],0
我看不出我做错了什么,但它拒绝为我工作。一整天都在为此而战。有任何想法吗?
这是我目前的代码.我正在使用express和knox,我认为我没有做任何异常,但是s3.putFile响应400状态代码但是null错误,并且文件没有上传.
var express = require('express');
var knox = require('knox');
var app = express();
app.use(express.bodyParser());
var s3 = knox.createClient({
key: process.env.AWS_ACCESS_KEY_ID,
secret: process.env.AWS_SECRET_ACCESS_KEY,
bucket: process.env.S3_BUCKET_NAME
});
app.post('/upload', function(req, res, next) {
var photo = req.files.photo;
var s3Headers = {
'Content-Type': photo.type,
'x-amz-acl': 'public-read'
};
s3.putFile(photo.path, photo.name, s3Headers, function(err, s3response){
//handle, respond
});
});
Run Code Online (Sandbox Code Playgroud)
这个相同的代码甚至可以从cloud9在线编辑器/调试器中运行,而不是来自Heroku.我猜这与" 短暂的文件系统 "有关,但这只是猜测.然而,我能够使用noir和weavejester的aws sdk在Clojure中使用s3 pass-thru上传工作,因此它必须在节点中也可以.
我正在尝试在scala play2应用程序中使用Java facebook库http://restfb.com/#publishing,但在尝试调用with下面的静态方法时,它会给我"Compliation Error [标识符预期,但'带'找到.]".
val fbClass = classOf[FacebookType]
val param = Parameter.with("message", msg)
val attachment = BinaryAttachment.with("cat.png", stream)
val fbResp = facebookClient.publish("me/photos", fbClass, attachment, param)
Run Code Online (Sandbox Code Playgroud)
我发现尝试调用受保护的静态方法存在问题,但这些方法被定义为public,如javadocs和source中所示.难道我做错了什么?
我尝试搜索这个但是没有找到任何东西,但是当将int []作为指针传递给本机DLL函数时,是不是仍然存在DLL可以维护对指针的引用的危险,然后尝试"固定"块终止后再次访问它?如果GC移动了您的阵列,这不会导致内存访问错误吗?如果是这样,你怎么解决这个问题?或者这是不太可能的情况?
如果我有一个9线的阵列,是否有一种简单的方法可以制作一个高的新线,如果9个中的一个很高?我知道我能做到
wire[8:0] data;
wire exactlyOneActive;
assign exactlyOneActive = (data[0] & !data[1] & !data[2] ...) |
(!data[0] & data[1] & !data[2] ...) |
(!data[0] & !data[1] & data[2] ...) |
...etc
Run Code Online (Sandbox Code Playgroud)
但是,对,对吧?特别是因为九根导线在某些时候可能是25根.有没有更好的方法,也许使用generate?它也必须是可合成的.
这是睡眠理发师问题的解决方案.(归功于CGrand,但我在这里找到了参考)

我很好奇这个dosync街区enter-the-shop.我的理解是这是一个交易,因此empty-seats将因STM而保持一致.但是,send-off如果重试事务,是否有可能被多次调用?如果没有,为什么,如果是,如何解决它?
UPDATE
虽然接受的答案仍然是正确的,但我注意到的一件事是可以进行优化 - 没有理由send-off在交易中调用.一旦您拥有交易的返回值,就可以在事后发送,如下所示:
(if (dosync
(when (pos? @empty-seats)
(alter empty-seats dec)))
(send-off barber cut-hair n)
(debug "(s) turning away customer" n))
Run Code Online (Sandbox Code Playgroud)
有趣的是,我在处理Haskell等效时想出了这个,这迫使你在STM和STM之外的"代理"中使用不同的类型.上面的原始解决方案不会编译,因为它们既可以在事务中,也可以在任何事务之外.(我的第一反应是将它们都放在交易中,直到我意识到不需要这个并且它们都可以被提取出来).
我认为修改后的事务应该是优越的,因为它可以更快地关闭事务,从事务中删除变量,我认为更容易阅读(甚至不必怀疑它被发送两次的可能性 - 这实际上是这整个问题没有实际意义)尽管如此,我仍然会提出任何需要了解STM和代理如何互动的人.
所以我有一些我想要的东西,在try块中,向一些数据对象添加各种数据,然后在抛出异常的情况下,保存带有错误的记录和在异常之前检索的所有数据字段.在Java中,这很容易.即使你使用某种不可变类型的记录,你也可以这样做:
MyRecord record = new MyRecord();
try {
record = record.withA(dangerouslyGetA());
record = record.withB(dangerouslyGetB());
record = record.withC(dangerouslyGetC());
} catch (Exception ex) {
record = record.withError(ex);
}
save(record);
Run Code Online (Sandbox Code Playgroud)
因此,如果它在步骤C发生炸弹,那么它将保存A,B和错误的记录.
我无法在Clojure中找出任何直接的方法.如果你放了try一个,let那么你必须将记录的"更新"分配给每个新变量,因此它们不在catch表达式的范围内.即使它们是,你也不会知道使用哪一个.
我想我可以在每个表达式周围放置一个try/catch/let,但这比Java版本要多得多,并且需要在save任何地方复制语句.我的理解是,Clojure的简洁性和容易避免重复是很好的,所以有些东西让我觉得这是错误的方法.
当然这是一个相当普遍的需求,并有一个简单的惯用解决方案,对吧?
有没有办法做类似的事情
first = {x:0}
second = {x:1,y:1}
both = [first, second]
Run Code Online (Sandbox Code Playgroud)
这样both被推断为{x::Int | r}或类似的东西?
我尝试了几件事:
[{x:3}] :: Array(forall r. {x::Int|r}) -- nope
test = Nil :: List(forall r. {x::Int|r})
{x:1} : test -- nope
type X r = {x::Int | r}
test = Nil :: List(X) -- nope
test = Nil :: List(X())
{x:1} : test
{x:1, y:1} : test -- nope
Run Code Online (Sandbox Code Playgroud)
我能想到的一切似乎都告诉我,不支持将这样的记录合并到一个集合中。有点像,函数可以是多态的,但列表不能。这是正确的解释吗?它让我想起了 F#“值限制”问题,虽然我认为这只是因为 CLR 限制而 JS 不应该有这个问题。但也许这无关紧要。
有没有办法声明列表/数组来支持这个?