小编Dax*_*ohl的帖子

如何基于属性使用JSON.NET序列化枚举?

下面的代码生成输出{"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 c# json json.net

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

DLR、Boo 和 JVM

我刚刚开始尝试了解有关 .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 方面变得有些过时了?

.net clr ironpython boo dynamic-language-runtime

5
推荐指数
2
解决办法
687
查看次数

WCF 无法反序列化 JSON 请求

我正在尝试编写一个 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

我看不出我做错了什么,但它拒绝为我工作。一整天都在为此而战。有任何想法吗?

wcf json

5
推荐指数
1
解决办法
4155
查看次数

如何使用node.js对Heroku上的s3进行pass-thru上传?

这是我目前的代码.我正在使用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.我猜这与" 短暂的文件系统 "有关,但这只是猜测.然而,我能够使用noirweavejester的aws sdk在Clojure中使用s3 pass-thru上传工作,因此它必须在节点中也可以.

heroku amazon-s3 node.js knox-amazon-s3-client

5
推荐指数
1
解决办法
2070
查看次数

从scala访问公共静态java方法

我正在尝试在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,如javadocssource中所示.难道我做错了什么?

scala playframework-2.0

5
推荐指数
1
解决办法
1101
查看次数

将指针(即int [])传递给DLL时,"fixed"是否真的可以保证什么?

我尝试搜索这个但是没有找到任何东西,但是当将int []作为指针传递给本机DLL函数时,是不是仍然存在DLL可以维护对指针的引用的危险,然后尝试"固定"块终止后再次访问它?如果GC移动了您的阵列,这不会导致内存访问错误吗?如果是这样,你怎么解决这个问题?或者这是不太可能的情况?

c# unsafe fixed dllimport

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

如果在Verilog中只有一个高电流,则导线高

如果我有一个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?它也必须是可合成的.

verilog

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

这个clojure解决方案是否有睡眠理发师的错误?

这是睡眠理发师问题的解决方案.(归功于CGrand,但我在这里找到了参考)

从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和代理如何互动的人.

clojure stm

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

如何在Clojure中的try/catch块中保留状态更新

所以我有一些我想要的东西,在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的简洁性和容易避免重复是很好的,所以有些东西让我觉得这是错误的方法.

当然这是一个相当普遍的需求,并有一个简单的惯用解决方案,对吧?

clojure

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

purescript 中列表/数组中的类似记录类型

有没有办法做类似的事情

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 不应该有这个问题。但也许这无关紧要。

有没有办法声明列表/数组来支持这个?

purescript

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