繁体   English   中英

定义一个C#类,它有时会在int和字典之间变化

[英]Defining a C# class that varies sometimes between int and a dictionary

using System.Web.Script.Serialization;

public class AfValue
{
    public DateTime timeStamp { get; set; }
    public int value { get; set; }
}

public class AfValues
{
    public List<AfValue> items { get; set; }
}

我在上面定义了我的类,我得到的数据看起来像下面那个,我遇到了问题。 如何在数据中间处理该部分? 在大多数情况下,Value是一个整数; 但是,有时它是一本字典,我想在字典中获取Value。

{
  "Items": [
    {
      "Timestamp": "2018-08-30T02:23:55.3390808Z",
      "Value": 16
    },
    {
      "Timestamp": "2018-08-30T02:31:22.0117492Z",
      "Value": 1
    },
    {
      "Timestamp": "2018-08-30T02:32:07.9333343Z",
      "Value": 16
    },
    {
      "Timestamp": "2018-08-30T02:34:15.0780029Z",
      "Value": {
        "Name": "Bad Input",
        "Value": 255,
        "IsSystem": true
      }
    },
    {
      "Timestamp": "2018-08-30T02:41:52.4217834Z",
      "Value": 16
    },
    {
      "Timestamp": "2018-08-30T02:41:56.4251708Z",
      "Value": 8
    },
    {
      "Timestamp": "2018-08-30T02:42:06.6542053Z",
      "Value": 24
    }
  ]
}

编辑:我不确定这是否与其他问题相同。 我无法将该解决方案映射到我的问题。

另外,我不能使用JSON.net。 我们必须使用System.Web.Script.Serialization。

您可以使用Json.NET具有JsonConverter ,申报Value为具有三个属性的一类,对于整数刚读整数并将其转换为一个Value与设定它的相关属性实例。

在链接文档中有一个例子,注意ReadJson方法,它从string转换为Version

public override Version ReadJson(JsonReader reader, Type objectType, Version existingValue, bool hasExistingValue, JsonSerializer serializer)
{
    string s = (string)reader.Value;

    return new Version(s);
}

你需要做的是获取reader.Value ,检查它是一个整数还是一个对象,并返回你为Value创建的类的实例。

看起来你正试图模仿OSIsoft的AFValue和AFValues,包括具有“坏价值”的SYSTEM State Set。 有几点需要注意。

  • 在OSIsoft的AF SDK中, AFValue .Value属性是一个对象,这就是为什么它可以是各种不同的东西。
  • 同样在AF SDK中, AFValues实现List而不是属性。
  • 虽然您可能将其视为字典,但SYSTEM状态集实际上更像是一个枚举。

这里的其他人将专注于您陈述的问题,但请记住,AFValue可以是Int16,Int32,Int64,Single,Double,String,DateTime,枚举值或其他内容。 特别是在过程控制世界中,我倾向于看到Single或Double,因为它们代表来自传感器的测量,而不是整数。

虽然您似乎正在使用PI Web API,但我建议您查看Live Library以获取有关AF SDK的帮助。 您可能还希望查看PI Web API参考的帮助。

您可能想要在GitHub上调查DotNetPI Web API客户端库 它已经为你做了很多繁重的工作。

最后,我知道您在PI Square上有一个帐户,所以PI开发者俱乐部非常欢迎这类问题。

来自OSIsoft的Rick Davin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM