Noob C# Class 声明问题
Noob C# Class Declaration Issue
所以我使用 json2csharp
创建了一个 class
public class ResponseType
{
public class Query
{
public string q { get; set; }
public object sku { get; set; }
public int limit { get; set; }
public object reference { get; set; }
public object mpn_or_sku { get; set; }
public string mpn { get; set; }
public object brand { get; set; }
public string __class__ { get; set; }
public int start { get; set; }
public object seller { get; set; }
}
public class Request
{
public bool exact_only { get; set; }
public string __class__ { get; set; }
public List<Query> queries { get; set; }
}
public class Seller
{
public string display_flag { get; set; }
public bool has_ecommerce { get; set; }
public string name { get; set; }
public string __class__ { get; set; }
public string homepage_url { get; set; }
public string id { get; set; }
public string uid { get; set; }
}
public class Prices
{
public List<List<object>> USD { get; set; }
public List<List<object>> JPY { get; set; }
public List<List<object>> CNY { get; set; }
}
public class Offer
{
public string sku { get; set; }
public string packaging { get; set; }
public string on_order_eta { get; set; }
public string last_updated { get; set; }
public int? order_multiple { get; set; }
public int in_stock_quantity { get; set; }
public string eligible_region { get; set; }
public int? moq { get; set; }
public int? on_order_quantity { get; set; }
public object octopart_rfq_url { get; set; }
public string __class__ { get; set; }
public Seller seller { get; set; }
public string product_url { get; set; }
public object factory_order_multiple { get; set; }
public string _naive_id { get; set; }
public int? factory_lead_days { get; set; }
public Prices prices { get; set; }
public bool is_authorized { get; set; }
public bool is_realtime { get; set; }
}
public class Brand
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Manufacturer
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Item
{
public List<Offer> offers { get; set; }
public string uid { get; set; }
public string mpn { get; set; }
public List<object> redirected_uids { get; set; }
public Brand brand { get; set; }
public string octopart_url { get; set; }
public string __class__ { get; set; }
public Manufacturer manufacturer { get; set; }
}
public class Result
{
public List<Item> items { get; set; }
public int hits { get; set; }
public string __class__ { get; set; }
public object reference { get; set; }
public object error { get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}
}
问题出在设计时,当我声明一个类型为 class:
的变量时
ResponseType Response = new ResponseType();
Intellisense 不允许我访问子classes RootObject.results
列表。它只显示 Equals
、GetHashCode
、GetType
和 ToString
。我假设我在 class 声明中做错了什么。
提前致谢!
编辑 -- 我是 C Sharp 的新手。我正在尝试解析来自 REST API 的响应。我将 Rest API 提供的 JSON 并使用 json2csharp 将其转换为 class。我的意图是做这样的事情
函数内 return:
public ResponseType ExecuteSearch(String PartNumber)
{
~ 生成请求的所有代码
// Perform the search and obtain results
var data = client.Execute(req).Content;
JSON = data;
return JsonConvert.DeserializeObject<ResponseType>(data);
}
然后能够将响应作为函数外部的对象进行访问
编辑 2:
我明白我做了什么。我应该简单地将 RootObject 重命名为 ResponseType,而不是将所有内容嵌套在 ResponseType 中。
Intellisense does not allow me to access the subclasses RootObject.results list
这是因为 属性 results
不是静态的,您尝试以这种方式访问它。通过 ClassName.PropertyName
访问静态 属性。有关 static variables 的更多信息,请查看 link。
It only shows Equals, GetHashCode, GetType and ToString
这是 C# 中的每个对象都从 class object
继承的基本方法集。这就是为什么你能看到它。
Intellisense 将允许您这样做:
ResponseType.RootObject ro = new ResponseType.RootObject();
ro.results.First();
因为您将需要 class 的一个实例来访问 属性 results
。
I am assuming I did something wrong in my class declaration.
视情况而定。基本上,如果编译器没有抱怨,那么您就可以按预期声明 classes。但是属性的声明命令您以特定方式访问它们。因此,如果您仍想使用 RootObject.results
访问 results
,则需要将其设置为 static
:
public class RootObject
{
public static List<Result> results { get; set; }
}
但请注意,此列表只会存在一次!并且对于 RootObject 的每个实例都不是单独的!由于您嵌入了 classes,因此您需要这样调用它:
ResponseType.RootObject.results.WhatEver();
编辑
我猜您想在 ResponseType
类型的对象中获取 RootObject
类型的对象。如果我是对的,那么没有必要在 ResponseType
中声明 classes,但你必须在其中声明每种类型的变量,如:
public class ResponseType
{
public RootObject MyRootObject{ get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}
现在您将能够访问 ResponseType
对象中的 results
变量:
ResponseType rt = new ResponseType();
rt.MyRootObject.results.WhatEver();
有关如何将 JSON 反序列化为 classes 的更多信息,请阅读 Deserialize JSON to C# Classes post
1) ResponseType class 的对象不包含任何字段(事件静态字段)。
2) 你声明了 ResponseType
对象,但是 results
是 RootObject
对象的字段。
因此,如果您想使用 results
,您应该这样做:
ResponseType.RootObject rootObject = new ResponseType.RootObject();
rootObject.results.DoWork();
以下是我认为您正在尝试做的事情。如果这是某种数据传输对象 (DTO),我只会以这种形式使用它,否则对于将在代码中使用的 class 来说是非常糟糕的做法(主要是因为 public所有字段上的 getter 和 setter 以及与 class 名称匹配的字段名称),但它确实显示了您的主要错误,那就是 classes 需要在您的主要 [=13] 之外定义=],如果您需要在顶层 class 中使用那种类型的 class,您需要定义一个 public 字段来访问它。
public class ResponseType
{
public Query Query { get; set; }
public Request Request { get; set; }
public Seller Seller { get; set; }
public Prices Prices { get; set; }
public Offer Offer { get; set; }
public Brand Brand { get; set; }
public Manufacturer Manufacturer { get; set; }
public Item Item { get; set; }
public Result Result { get; set; }
public RootObject RootObject { get; set; }
}
public class Query
{
public string q { get; set; }
public object sku { get; set; }
public int limit { get; set; }
public object reference { get; set; }
public object mpn_or_sku { get; set; }
public string mpn { get; set; }
public object brand { get; set; }
public string __class__ { get; set; }
public int start { get; set; }
public object seller { get; set; }
}
public class Request
{
public bool exact_only { get; set; }
public string __class__ { get; set; }
public List<Query> queries { get; set; }
}
public class Seller
{
public string display_flag { get; set; }
public bool has_ecommerce { get; set; }
public string name { get; set; }
public string __class__ { get; set; }
public string homepage_url { get; set; }
public string id { get; set; }
public string uid { get; set; }
}
public class Prices
{
public List<List<object>> USD { get; set; }
public List<List<object>> JPY { get; set; }
public List<List<object>> CNY { get; set; }
}
public class Offer
{
public string sku { get; set; }
public string packaging { get; set; }
public string on_order_eta { get; set; }
public string last_updated { get; set; }
public int? order_multiple { get; set; }
public int in_stock_quantity { get; set; }
public string eligible_region { get; set; }
public int? moq { get; set; }
public int? on_order_quantity { get; set; }
public object octopart_rfq_url { get; set; }
public string __class__ { get; set; }
public Seller seller { get; set; }
public string product_url { get; set; }
public object factory_order_multiple { get; set; }
public string _naive_id { get; set; }
public int? factory_lead_days { get; set; }
public Prices prices { get; set; }
public bool is_authorized { get; set; }
public bool is_realtime { get; set; }
}
public class Brand
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Manufacturer
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Item
{
public List<Offer> offers { get; set; }
public string uid { get; set; }
public string mpn { get; set; }
public List<object> redirected_uids { get; set; }
public Brand brand { get; set; }
public string octopart_url { get; set; }
public string __class__ { get; set; }
public Manufacturer manufacturer { get; set; }
}
public class Result
{
public List<Item> items { get; set; }
public int hits { get; set; }
public string __class__ { get; set; }
public object reference { get; set; }
public object error { get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}
所以我使用 json2csharp
创建了一个 class public class ResponseType
{
public class Query
{
public string q { get; set; }
public object sku { get; set; }
public int limit { get; set; }
public object reference { get; set; }
public object mpn_or_sku { get; set; }
public string mpn { get; set; }
public object brand { get; set; }
public string __class__ { get; set; }
public int start { get; set; }
public object seller { get; set; }
}
public class Request
{
public bool exact_only { get; set; }
public string __class__ { get; set; }
public List<Query> queries { get; set; }
}
public class Seller
{
public string display_flag { get; set; }
public bool has_ecommerce { get; set; }
public string name { get; set; }
public string __class__ { get; set; }
public string homepage_url { get; set; }
public string id { get; set; }
public string uid { get; set; }
}
public class Prices
{
public List<List<object>> USD { get; set; }
public List<List<object>> JPY { get; set; }
public List<List<object>> CNY { get; set; }
}
public class Offer
{
public string sku { get; set; }
public string packaging { get; set; }
public string on_order_eta { get; set; }
public string last_updated { get; set; }
public int? order_multiple { get; set; }
public int in_stock_quantity { get; set; }
public string eligible_region { get; set; }
public int? moq { get; set; }
public int? on_order_quantity { get; set; }
public object octopart_rfq_url { get; set; }
public string __class__ { get; set; }
public Seller seller { get; set; }
public string product_url { get; set; }
public object factory_order_multiple { get; set; }
public string _naive_id { get; set; }
public int? factory_lead_days { get; set; }
public Prices prices { get; set; }
public bool is_authorized { get; set; }
public bool is_realtime { get; set; }
}
public class Brand
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Manufacturer
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Item
{
public List<Offer> offers { get; set; }
public string uid { get; set; }
public string mpn { get; set; }
public List<object> redirected_uids { get; set; }
public Brand brand { get; set; }
public string octopart_url { get; set; }
public string __class__ { get; set; }
public Manufacturer manufacturer { get; set; }
}
public class Result
{
public List<Item> items { get; set; }
public int hits { get; set; }
public string __class__ { get; set; }
public object reference { get; set; }
public object error { get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}
}
问题出在设计时,当我声明一个类型为 class:
的变量时ResponseType Response = new ResponseType();
Intellisense 不允许我访问子classes RootObject.results
列表。它只显示 Equals
、GetHashCode
、GetType
和 ToString
。我假设我在 class 声明中做错了什么。
提前致谢!
编辑 -- 我是 C Sharp 的新手。我正在尝试解析来自 REST API 的响应。我将 Rest API 提供的 JSON 并使用 json2csharp 将其转换为 class。我的意图是做这样的事情
函数内 return:
public ResponseType ExecuteSearch(String PartNumber)
{
~ 生成请求的所有代码
// Perform the search and obtain results
var data = client.Execute(req).Content;
JSON = data;
return JsonConvert.DeserializeObject<ResponseType>(data);
}
然后能够将响应作为函数外部的对象进行访问
编辑 2:
我明白我做了什么。我应该简单地将 RootObject 重命名为 ResponseType,而不是将所有内容嵌套在 ResponseType 中。
Intellisense does not allow me to access the subclasses RootObject.results list
这是因为 属性 results
不是静态的,您尝试以这种方式访问它。通过 ClassName.PropertyName
访问静态 属性。有关 static variables 的更多信息,请查看 link。
It only shows Equals, GetHashCode, GetType and ToString
这是 C# 中的每个对象都从 class object
继承的基本方法集。这就是为什么你能看到它。
Intellisense 将允许您这样做:
ResponseType.RootObject ro = new ResponseType.RootObject();
ro.results.First();
因为您将需要 class 的一个实例来访问 属性 results
。
I am assuming I did something wrong in my class declaration.
视情况而定。基本上,如果编译器没有抱怨,那么您就可以按预期声明 classes。但是属性的声明命令您以特定方式访问它们。因此,如果您仍想使用 RootObject.results
访问 results
,则需要将其设置为 static
:
public class RootObject
{
public static List<Result> results { get; set; }
}
但请注意,此列表只会存在一次!并且对于 RootObject 的每个实例都不是单独的!由于您嵌入了 classes,因此您需要这样调用它:
ResponseType.RootObject.results.WhatEver();
编辑
我猜您想在 ResponseType
类型的对象中获取 RootObject
类型的对象。如果我是对的,那么没有必要在 ResponseType
中声明 classes,但你必须在其中声明每种类型的变量,如:
public class ResponseType
{
public RootObject MyRootObject{ get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}
现在您将能够访问 ResponseType
对象中的 results
变量:
ResponseType rt = new ResponseType();
rt.MyRootObject.results.WhatEver();
有关如何将 JSON 反序列化为 classes 的更多信息,请阅读 Deserialize JSON to C# Classes post
1) ResponseType class 的对象不包含任何字段(事件静态字段)。
2) 你声明了 ResponseType
对象,但是 results
是 RootObject
对象的字段。
因此,如果您想使用 results
,您应该这样做:
ResponseType.RootObject rootObject = new ResponseType.RootObject();
rootObject.results.DoWork();
以下是我认为您正在尝试做的事情。如果这是某种数据传输对象 (DTO),我只会以这种形式使用它,否则对于将在代码中使用的 class 来说是非常糟糕的做法(主要是因为 public所有字段上的 getter 和 setter 以及与 class 名称匹配的字段名称),但它确实显示了您的主要错误,那就是 classes 需要在您的主要 [=13] 之外定义=],如果您需要在顶层 class 中使用那种类型的 class,您需要定义一个 public 字段来访问它。
public class ResponseType
{
public Query Query { get; set; }
public Request Request { get; set; }
public Seller Seller { get; set; }
public Prices Prices { get; set; }
public Offer Offer { get; set; }
public Brand Brand { get; set; }
public Manufacturer Manufacturer { get; set; }
public Item Item { get; set; }
public Result Result { get; set; }
public RootObject RootObject { get; set; }
}
public class Query
{
public string q { get; set; }
public object sku { get; set; }
public int limit { get; set; }
public object reference { get; set; }
public object mpn_or_sku { get; set; }
public string mpn { get; set; }
public object brand { get; set; }
public string __class__ { get; set; }
public int start { get; set; }
public object seller { get; set; }
}
public class Request
{
public bool exact_only { get; set; }
public string __class__ { get; set; }
public List<Query> queries { get; set; }
}
public class Seller
{
public string display_flag { get; set; }
public bool has_ecommerce { get; set; }
public string name { get; set; }
public string __class__ { get; set; }
public string homepage_url { get; set; }
public string id { get; set; }
public string uid { get; set; }
}
public class Prices
{
public List<List<object>> USD { get; set; }
public List<List<object>> JPY { get; set; }
public List<List<object>> CNY { get; set; }
}
public class Offer
{
public string sku { get; set; }
public string packaging { get; set; }
public string on_order_eta { get; set; }
public string last_updated { get; set; }
public int? order_multiple { get; set; }
public int in_stock_quantity { get; set; }
public string eligible_region { get; set; }
public int? moq { get; set; }
public int? on_order_quantity { get; set; }
public object octopart_rfq_url { get; set; }
public string __class__ { get; set; }
public Seller seller { get; set; }
public string product_url { get; set; }
public object factory_order_multiple { get; set; }
public string _naive_id { get; set; }
public int? factory_lead_days { get; set; }
public Prices prices { get; set; }
public bool is_authorized { get; set; }
public bool is_realtime { get; set; }
}
public class Brand
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Manufacturer
{
public string homepage_url { get; set; }
public string __class__ { get; set; }
public string name { get; set; }
public string uid { get; set; }
}
public class Item
{
public List<Offer> offers { get; set; }
public string uid { get; set; }
public string mpn { get; set; }
public List<object> redirected_uids { get; set; }
public Brand brand { get; set; }
public string octopart_url { get; set; }
public string __class__ { get; set; }
public Manufacturer manufacturer { get; set; }
}
public class Result
{
public List<Item> items { get; set; }
public int hits { get; set; }
public string __class__ { get; set; }
public object reference { get; set; }
public object error { get; set; }
}
public class RootObject
{
public int msec { get; set; }
public Request request { get; set; }
public string __class__ { get; set; }
public List<Result> results { get; set; }
}