这是我的功能,它将所有项目放在数据库中。
public bool getUserProjects(ref List<erpAssets>userProjects)
{
string arguments = "{\"sessionId\":\"" + m_LoggedInUser.sessionId + "\"," +
"\"assetType\":\"" + PROJECT_ASSET_TYPE_NAME + "\"" +
"}";
string response = UrlParser(METHOD_GET_ASSETS, MODULE_ADMINISTRATION, arguments); //calling the function urlParse to get the response from that page
erpAPIResponse basicResponse = JsonConvert.DeserializeObject<erpAPIResponse>(response);
if (basicResponse.success.Equals("yes"))
{
try
{
erpAssets[] Projects = JsonConvert.DeserializeObject<erpAssets[]>(basicResponse.arguments);
userProjects.AddRange(Projects);
}
catch (Exception e)
{
}
}
else return false;
return true; // sending the response back to client
}
我的erpAsset类如下:
class erpAssets
{
public string assetId { get; set; }
public string assetSerialNo { get; set; }
public string serialNo { get; set; }
public string assetDescription { get; set; }
public string assetType { get; set; }
public string parentId { get; set; }
public string assetIsTrakable { get; set; }
public bool isTrackable { get; set; }
public bool isMovable { get; set; }
public string assetInheritsRegion { get; set; }
public string inheritsRegion { get; set; }
public string assetModel { get; set; }
public string model { get; set; }
public erpPoint[] assetRegion { get; set; }
}
我的erpPoint类如下:
class erpPoint
{
public double X { get; set; }
public double Y { get; set; }
}
现在我面临的问题是当assetRegion为null然后我得到以下异常
将值“”转换为'erp.erpPoint []'类型时出错。
scenario1正常工作: { “assetId”:“43711”, “assetSerialNo”:“Sector43”, “assetDescription”:“”, “assetVersion”:“”, “assetIsMovable”:“f”, “assetType”:“项目”, “assetModel”:“项目”, “parentId”:“32537”, “assetIsTrackable”:“f”, “assetInheritsRegion”:“f”, “assetRegion”:[ { “X”: - 122.69103924537, “Y”:49.105749366835 }, { “X”: - 122.69103924537, “Y”:49.119046702041 }, { “X”: - 122.68010753619, “Y”:49.119046702041 }, { “X”: - 122.68010753619, “Y”:49.105749366835 } ] }
这很好。
Scenario2:
{ “assetId”:“64374”, “assetSerialNo”:“FeedLot”, “assetDescription”:“”, “assetVersion”:“”, “assetIsMovable”:“t”, “assetType”:“项目”, “assetModel”:“项目”, “parentId”:“64374”, “assetIsTrackable”:“t”, “assetInheritsRegion”:“f”, “assetRegion”:“” }
这是我得到例外的地方。 assetregion为null,现在我在设置其值时遇到异常
答案 0 :(得分:5)
您有两种选择:
使用
{ get; set; }
并且您无法指定正文。
或者您必须为getter和setter 声明一个主体。
另请注意double
不可为空。请改用double?
。
private double? x;
public double? X
{
get { return this.x; }
set
{
if (value != null)
{
this.x = value;
}
}
}
答案 1 :(得分:1)
如果要创建自定义setter,还必须提供自定义getter。通常这意味着您需要自己创建支持字段。
class a
{
private double x;
public double X
{
get
{
return this.x;
}
set
{
if (value != null) // warning, see below
{
this.x = value;
}
}
}
}
当然,您还遇到一个问题:double
与所有值类型 * 一样,不可为空,这整个方法可能根本不需要。如果您想确保X
永远不会设置为空值,只需将其声明为double
,您就不必担心这一点。这就足够了:
class a
{
public double X { get; set; }
}
*除了Nullable<T>
答案 2 :(得分:0)
您需要使用详细语法:
private double? x;
public double? X
{
get { return x; }
set {
if (value != null){
x = value;
}
}
}
<强>更新强>
有人正确地指出double
不能为空,将类型更改为可为空。
答案 3 :(得分:0)
您可以 使用自动属性或字段支持的属性。你不能混。在你的情况下,这将意味着
public double? DifferentPorpName
{
get {return this.X;}
...
}
答案 4 :(得分:0)
就设置而言,我会将其更改为以下内容,对我来说更具说明性:
set
{
double x = value;
if (value != null) x = value;
else x = this.X;
this.X = x;
}
您的get
需要正确宣布或完全省略
我忘了问你,怎么能把null传递给double的属性?如果你尝试的话,你肯定会在运行时出错。
哎呀,其他人已经注意到了:)