这是一个非常的菜鸟问题,但我一直在谷歌搜索,似乎无法自己解决问题。
我创建了一个包含许多字段的类(如下所示)。我正在从.JSON文件中获取数据。
public class WeatherData
{
//WeatherDatas
public string airtemp { get; set; }
public string apparenttemp { get; set; }
public string windspeedkph { get; set; }
public string windgustskph { get; set; }
public string humidity { get; set; }
public string dewpoint { get; set; }
public string deltaT { get; set; }
public string pressure { get; set; }
public WeatherData(string json, int index)
{
JObject jsonObject = JObject.Parse(json);
JToken jObbs = jsonObject["observations"];
JToken jData = jObbs["data"];
airtemp = (string)jData[index]["air_temp"];
apparenttemp = (string)jData[index]["apparent_t"];
windspeedkph = (string)jData[index]["wind_spd_kmh"];
windgustskph = (string)jData[index]["gust_kmh"];
humidity = (string)jData[index]["rel_hum"];
pressure = (string)jData[index]["press_qnh"];
}
}
使用上面我可以从“WeatherData.airtemp”获得“airtemp”。但是由于一些钟声和口哨,我想稍后添加我真正想做的是不仅返回airtemp值而且还返回指示值类型的字段/属性。例如:
WeatherData.WeatherDatas.airtemp.value
& WeatherData.WeatherDatas.airtemp.type
其中.value
为气温而.type
为字符串“airtemp”。
我似乎无法弄清楚如何描述谷歌我想做什么。
答案 0 :(得分:1)
我想你可能想看一下使用字典。 c#中的字典使用Key,Value对,因此您可能希望创建一个字典,您的键值将是类型,例如airtemp,值的值将是32.54等值。
如果您是C#的新手,我建议您查看此页面,并希望学习字典或任何其他很酷的C#内容。 http://www.dotnetperls.com/dictionary
答案 1 :(得分:1)
您可以在此处执行的操作是使用struct
来表示您的实例属性。像这样:
public struct Data
{
public Type type; // if you want a string type (I don't know why) you can use a string type
public string Value;
}
然后你的课将会是这样的:
public class WeatherData
{
//WeatherDatas
public Data airtemp { get; set; }
...
public WeatherData(string json, int index)
{
JObject jsonObject = JObject.Parse(json);
JToken jObbs = jsonObject["observations"];
JToken jData = jObbs["data"];
airtemp.Value = new Data((string)jData[index]["air_temp"], typeof(string));
...
}
}
请注意:如果您的类中有太多属性,请考虑使用类而不是struct。
答案 2 :(得分:0)
您需要探索类型:
Type myType;
Object windy = "strong";
myType = windy.GetType();
然后使用typeof()
查看您的内容。
不确定字典是前进的方式。
答案 3 :(得分:0)
您可以在不更改结构的情况下获取属性名称:
示例:PropertyUtil<WeatherData>.GetName(x => x.airtemp);
https://stackoverflow.com/a/6043028/440030 (源代码)
public static class PropertyUtil<TSource>
{
public static string GetPropertyName<TResult>(
Expression<Func<TSource, TResult>> propertyExpression)
{
return (propertyExpression.Body as MemberExpression).Member.Name;
}
}
答案 4 :(得分:0)
您可以创建自己的数据类型,而不是使用字符串使用其他类似的;
public class UserString
{
public Type _type{ get; set; }
public string value{ get; set; }
public UserString()
{
_type = null;
value = string.Empty;
}
}
public class WeatherData
{
//WeatherDatas
public UserString airtemp { get; set; }
public UserString apparenttemp { get; set; }
public UserString windspeedkph { get; set; }
public UserString windgustskph { get; set; }
public UserString humidity { get; set; }
public UserString dewpoint { get; set; }
public UserString deltaT { get; set; }
public UserString pressure { get; set; }
public WeatherData(string json, int index)
{
JObject jsonObject = JObject.Parse(json);
JToken jObbs = jsonObject["observations"];
JToken jData = jObbs["data"];
airtemp.value = (string)jData[index]["air_temp"];
// airtemp._type = typeof(string); //Something like that.
apparenttemp = (string)jData[index]["apparent_t"];
windspeedkph = (string)jData[index]["wind_spd_kmh"];
windgustskph = (string)jData[index]["gust_kmh"];
humidity = (string)jData[index]["rel_hum"];
pressure = (string)jData[index]["press_qnh"];
}
}