我有一个c#类返回一些字段....但我希望它返回一个自定义对象列表(我想!!!)

时间:2014-02-02 08:00:00

标签: c#

这是一个非常的菜鸟问题,但我一直在谷歌搜索,似乎无法自己解决问题。
我创建了一个包含许多字段的类(如下所示)。我正在从.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”。

我似乎无法弄清楚如何描述谷歌我想做什么。

5 个答案:

答案 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"];
    }
}