Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在web api中使属性为空_C#_Asp.net Web Api_Odata - Fatal编程技术网

C# 如何在web api中使属性为空

C# 如何在web api中使属性为空,c#,asp.net-web-api,odata,C#,Asp.net Web Api,Odata,对于如下所示的模型文件: public class WebApiEntity { public string id { get; set; } public Collection<CData> data { get; set; } } public class CData { public string CType { get; set; } public string CId { get; set; } } 公共类WebAPI实体 { 公共字符串id{get

对于如下所示的模型文件:

public class WebApiEntity
{
  public string id { get; set; }
  public Collection<CData> data { get; set; }
}


public class CData
{
  public string CType { get; set; }

  public string CId { get; set; }
}
公共类WebAPI实体
{
公共字符串id{get;set;}
公共收集数据{get;set;}
}
公共类CData
{
公共字符串CType{get;set;}
公共字符串CId{get;set;}
}
当我使用服务引用生成ODATA客户端时,它看起来像:

<EntityType Name="WebApiEntity">
    <Key>
    <PropertyRef Name="id" />
    </Key>
    <Property Name="id" Type="Edm.String" Nullable="false" />
    <Property Name="data" Type="Collection(NamespaceValue.CData)" Nullable="false" />
</EntityType>

它的nullable属性设置为FALSE。我该怎么做才能把它变成现实。 这里似乎不能使用null。谢谢你的帮助

请尝试以下操作:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
var collectionProperty = builder.EntityType<WebApiEntity>().CollectionProperty<CData>(c=>c.data);
collectionProperty.IsOptional();
ODataConventionModelBuilder=new ODataConventionModelBuilder();
var collectionProperty=builder.EntityType().collectionProperty(c=>c.data);
collectionProperty.IsOptional();

可能对某人有用。 其中一个解决方案是使用CData作为结构类型(但会受到一些限制)。结构是值类型

public class WebApiEntity
{
    public Collection<CData> data { get; set; }
    public Collection<(String CType, String CId)> data_tuple { get; set; } 
}

public struct CData
{
    public string CType { get; set; }
    public string CId { get; set; }
}
公共类WebAPI实体
{
公共收集数据{get;set;}
公共集合数据组{get;set;}
}
公共结构CData
{
公共字符串CType{get;set;}
公共字符串CId{get;set;}
}
OData元数据:

<Property Name="data" Type="Collection(Diagnostics.Data.Diagnostics.CData)"/>
<Property Name="data_tuple" Type="Collection(System.ValueTuple_2OfString_String)"/>


使用CData[]而不是集合类型如何?我认为
可空的
与它是否是可空的类型有关,即
int?
,而且由于字符串和集合不是值类型,这与此无关。@Oscar使用数组生成ditto edm as collectionQuestion title和body不一致。Title询问如何使其不可为null,它似乎已经是了。正文似乎在问如何使其可为空。感谢您的指出。更正标题。但这会使其为空吗?从外观上看,它应该使其不可为null。很抱歉误解了您的问题,我已经更新了答案。谢谢,但我在生成器中没有看到任何名为EntityType的方法。输入错误?不,它不是输入错误,在新版ODataConventionModelBuilder中,方法实体和AddEntity被EntityType和AddEntityType替换。因此,在您的情况下,只需使用builder.Entity()。尝试一下。似乎没有帮助!:(虽然方法IsOptional()似乎仅用于此目的。另一方面,如果我将集合替换为集合,它将自动变为可空。