[英]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。 有几点需要注意。
这里的其他人将专注于您陈述的问题,但请记住,AFValue可以是Int16,Int32,Int64,Single,Double,String,DateTime,枚举值或其他内容。 特别是在过程控制世界中,我倾向于看到Single或Double,因为它们代表来自传感器的测量,而不是整数。
虽然您似乎正在使用PI Web API,但我建议您查看Live Library以获取有关AF SDK的帮助。 您可能还希望查看PI Web API参考的帮助。
您可能想要在GitHub上调查DotNet的PI Web API客户端库 。 它已经为你做了很多繁重的工作。
最后,我知道您在PI Square上有一个帐户,所以PI开发者俱乐部非常欢迎这类问题。
来自OSIsoft的Rick Davin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.