c# JSON.NET如何创建通用电报



我正在构建一个c#。.NET 4.5)通用的"电报"——因为找不到更好的词了——在plc和普通pc之间使用tcp和JSON(尤其是JSON.NET)进行通信。我有一个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()使用this时:

 ... Newtonsoft.Json.JsonConvert.SerializeObject(_payload) ...

你看到"斜坡"这个词是如何被"有效载荷"取代的吗?我知道我可以创建一个方法,并传递对象和对象的名称——这肯定可以工作。但我想要更复杂一点,因为这应该是可能的,也因为我可以看到一些其他的原因,这种设计可能会更好地工作。我希望代码只知道调用它的变量的名称并使用它。我见过许多建议使用了一些我几乎不理解的东西,但是当我试着去适应它时,它似乎被一个或另一个问题所困扰。所以我想我应该问一个新的问题,因为肯定有很多人想用JSON和新的动态做同样的事情?

StackOverflow有关于属性和字典、反射、与t有关的东西、表达式等信息。例如,这个问题:如何获得在声明中物理键入的变量的名称?查找传递给函数的变量名

我不介意把类代码弄得乱七八糟,但我希望调用代码像"myTelegram"一样干净。payload = rampTime;"

很抱歉,我不能很好地阅读所有的建议-我花了大部分时间编写plc代码,现在才有一个plc,一边是c#。

还有,如果有一种更优雅、完全不同的做事方式,我很想听听。

谢谢!

听起来你在寻找一个ExpandoObject。使用ExpandoObject,您的电报看起来像:

class Telegram
    {
        private dynamic _payload = new ExpandoObject();
        public dynamic payload
        {
            get
            {
                return _payload;
            }
        }
        public string ToJson()
        {
            ...
        }
    }

在你的代码中:

var telegram = new Telegram();
telegram.payload.rampTime = 2000;
Console.WriteLine(telegram.ToJson());

相关内容

  • 没有找到相关文章

最新更新