【发布时间】:2014-08-19 22:15:16
【问题描述】:
我正在构建一个 C# (.NET 4.5) 通用“电报”——因为没有更好的词——它使用 tcp 和 JSON,尤其是 JSON.NET 在 plc 和普通 pc 之间进行通信。我有一个 tcp 服务器设置和工作,我可以从对象中创建 Json 字符串,然后可以传递这些字符串。所以我只剩下定义一个标准的方式来来回传递信息、命令和事件。我现在苦苦挣扎的是如何轻松格式化“有效负载”。我有一个 JsonTelegram 类,其中包含一个名为“payload”的动态变量 - 或多或少是这样的:
private dynamic _payload;
public dynamic payload
{
get
{
return _payload;
}
set
{
_payload = value;
updateContents();
}
}
所以如果我像这样更新这个变量:
myTelegram.payload = rampTime;
我希望看到最终的 JSON 是这样的:
{
"purpose": "Update this variable",
"payload": {
"rampTime": 2000
},
"timeStamp": "2000-01-01T00:00:00.000-00:00",
"returnID": "2000-01-01T00:00:00.000-00:00"
}
这是我真正苦苦挣扎的有效负载部分,因为那里的代码最终看起来像这样:
{
"purpose": "Update this variable",
"payload": 2000,
"timeStamp": "2000-01-01T00:00:00.000-00:00",
"returnID": "2000-01-01T00:00:00.000-00:00"
}
当 updateContents() 使用这个时:
... Newtonsoft.Json.JsonConvert.SerializeObject(_payload) ...
你看到“斜坡”这个词是如何被“有效载荷”取代的吗?我知道我可以创建一个方法并同时传递对象和对象的名称——这肯定会起作用。但我想变得更棘手,只是因为它应该是可能的,也因为在路上我可以看到其他一些原因,这种设计可能会更好地工作。我希望代码简单地知道调用它的变量的名称并使用它。我已经看到了很多使用我几乎不理解的东西的建议,但是当我尝试调整它时,它似乎被一个问题或另一个问题挂断了。所以我想我会问一个新问题,因为肯定有很多人想用 JSON 和新动态做同样的事情?
StackOverflow 包含关于属性和字典、反射、与 t 相关的信息、表达式等的信息。比如这个问题:How do you get a variable's name as it was physically typed in its declaration? 和这个Finding the variable name passed to a function
我不介意把类代码弄得乱七八糟,但我希望调用代码像“myTelegram.payload = rampTime;”一样干净
很抱歉,我不能很好地处理所有建议 - 我大部分时间都在编写 plc 代码,而现在有一个 plc 一边做 C#。
另外,如果有更优雅的方式来做完全不同的事情,我很想听听。
谢谢!
【问题讨论】:
-
使用匿名类型。
myTelegram.payload = new { rampTime = rampTime };