序列化属性

时间:2016-03-13 11:19:48

标签: serialization codefluent

我在CF文档,常见问题解答,博客和SO条目中到处搜索,但仍然无法理解为什么这个模型:

    <cf:project defaultNamespace="Humanisme" xmlns:cf="http://www.softfluent.com/codefluent/2005/1" xmlns:cfx="http://www.softfluent.com/codefluent/modeler/2008/1" xmlns:cfom="http://www.softfluent.com/codefluent/producers.model/2005/1" xmlns:cfps="http://www.softfluent.com/codefluent/producers.sqlserver/2005/1" xmlns:cfsm="http://www.softfluent.com/codefluent/producers.servicemodel/2007/1" defaultKeyPropertyTypeName="int" defaultMaxLength="240" persistencePropertyNameFormat="{1}" createDefaultMethodForms="true" createDefaultApplication="false" createDefaultHints="false">
  <cf:import path="Default.Surface.cfp" />
  <cf:producer name="Business Object Model (BOM)" typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom">
    <cf:configuration compileWithVisualStudio="true" compile="false" codeDomProviderTypeName="CSharp" targetDirectory="..\Humanisme.classes" produceWebMembershipProvider="false" produceWebProfileProvider="false" produceWebBasicAuthenticationModule="false" cfx:targetProject="..\Humanisme.classes\Humanisme.classes.csproj" cfx:targetProjectLayout="Update">
      <subProducer typeName="CodeFluent.Producers.ServiceModel.ServiceProducer, CodeFluent.Producers.ServiceModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1bb6d7cccf1045ec" compileWithVisualStudio="true" compile="false" codeDomProviderTypeName="CSharp" targetDirectory="..\Humanisme.webApi" silverlightTargetVersion="Unspecified" dataAnnotationsProductionModes="NoAnnotations, All" jsonOptions="EnableJson" outputName="HumanismeService" cfx:targetProject="..\Humanisme.webApi\Humanisme.webApi.csproj" cfx:targetProjectLayout="Update" produceProxy="False" />
    </cf:configuration>
  </cf:producer>

(....)

<cf:entity name="EtapaVital" namespace="Humanisme" categoryPath="/Humanisme">
    <cf:property name="Id" key="true" />
    <cf:property name="Nom" />
    <cf:property name="Idioma" typeName="{0}.EtapaVitalIdiomaCollection" relationPropertyName="Etapa" />
    <cf:property name="Documents" typeName="{0}.DocumentCollection" relationPropertyName="EtapaVital" />
  </cf:entity>

渲染到这些序列化属性:

  1. RowVersion和EntityState获取序列化属性。
  2. EntityDisplayName没有。

    [System.Runtime.Serialization.DataMemberAttribute(Order=2147483647)]
    private CodeFluent.Runtime.CodeFluentEntityState _entityState;
    
            public EtapaVital()
    
            [System.Runtime.Serialization.DataMemberAttribute()]
            public virtual string EntityKey
            {
                get
                {
                    return this.Id.ToString();
                }
                set
                {
                    this.Id = ((int)(ConvertUtilities.ChangeType(value, typeof(int), -1)));
                }
            }
    
            public virtual string EntityDisplayName
            {
                get
                {
                    return this.Nom;
                }
            }
    
            [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
            [System.ComponentModel.DataObjectFieldAttribute(false, true)]
            [System.ComponentModel.TypeConverterAttribute(typeof(CodeFluent.Runtime.Design.ByteArrayConverter))]
            [System.Runtime.Serialization.DataMemberAttribute()]
            public byte[] RowVersion
            {
                get
                {
                    return this._rowVersion;
                }
                set
                {
                    if (((value != null) 
                                && (value.Length == 0)))
                    {
                        value = null;
                    }
                    this._rowVersion = value;
                    this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("RowVersion"));
                }
            }
    
            [System.ComponentModel.DefaultValueAttribute(((int)(-1)))]
            [System.Xml.Serialization.XmlElementAttribute(IsNullable=false, Type=typeof(int))]
            [System.ComponentModel.DataObjectFieldAttribute(true)]
           [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=100)]
            public int Id
            {
                get
                {
                    return this._id;
                }
                set
                {
                    if ((System.Collections.Generic.EqualityComparer<int>.Default.Equals(value, this._id) == true))
                    {
                        return;
                    }
                    int oldKey = this._id;
                    this._id = value;
                    try
                    {
                        this.OnCollectionKeyChanged(oldKey);
                    }
                    catch (System.ArgumentException )
                    {
                        this._id = oldKey;
                        return;
                    }
                    this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
                    this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("Id"));
                }
            }
    
            [System.ComponentModel.DefaultValueAttribute(default(string))]
            [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Type=typeof(string))]
            [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=200)]
            public string Nom
            {
                get
                {
                    return this._nom;
                }
                set
                {
                    this._nom = value;
                    this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
                    this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("Nom"));
                }
            }
    
            [System.Xml.Serialization.XmlIgnoreAttribute()]
            public Humanisme.EtapaVitalIdiomaCollection Idioma
            {
                get
                {
                    if ((this._idioma == null))
                    {
                        if (((this.Id == -1) 
                                    || (this.EntityState.Equals(CodeFluent.Runtime.CodeFluentEntityState.Created) == true)))
                        {
                            this._idioma = new Humanisme.EtapaVitalIdiomaCollection(this);
                            return this._idioma;
                        }
                        this._idioma = Humanisme.EtapaVitalIdiomaCollection.LoadByEtapa(this);
                    }
                    return this._idioma;
                }
            }
    
            [System.Xml.Serialization.XmlIgnoreAttribute()]
            public Humanisme.DocumentCollection Documents
            {
                get
                {
                    if ((this._documents == null))
                    {
                        if (((this.Id == -1) 
                                    || (this.EntityState.Equals(CodeFluent.Runtime.CodeFluentEntityState.Created) == true)))
                        {
                            this._documents = new Humanisme.DocumentCollection(null, this);
                            return this._documents;
                        }
                        this._documents = Humanisme.DocumentCollection.LoadByEtapaVital(this);
                    }
                    return this._documents;
                }
            }
    
    
            public virtual CodeFluent.Runtime.CodeFluentEntityState EntityState
            {
                get
                {
                    return this._entityState;
                }
                set
                {
                    if ((System.Collections.Generic.EqualityComparer<CodeFluent.Runtime.CodeFluentEntityState>.Default.Equals(value, this.EntityState) == true))
                    {
                        return;
                    }
                    if (((this._entityState == CodeFluent.Runtime.CodeFluentEntityState.ToBeDeleted) 
                                && (value == CodeFluent.Runtime.CodeFluentEntityState.Modified)))
                    {
                        return;
                    }
                    if (((this._entityState == CodeFluent.Runtime.CodeFluentEntityState.Created) 
                                && (value == CodeFluent.Runtime.CodeFluentEntityState.Modified)))
                    {
                        return;
                    }
                    this._entityState = value;
                    this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntityState"));
                }
            }
    
  3. 模型表面“属性”窗口似乎没有相关的属性选项,我无法在cfp文件中找到xml标签或属性。

    如果您能给我任何线索或参考,从哪里开始学习在课程中导致这些输出的CodeFluent模型选项,我将非常感激。

    再次感谢,我真的变成了CodeFluent爱好者!

1 个答案:

答案 0 :(得分:1)

Core Animation属性由CodeFluent实体生成,因为您将并发模式设置为initdocumentation)。如果您没有此属性的最新值,则无法保存实体(RowVersion)。所以这个属性需要序列化。

Optimistic用于UI目的。其值由一个或多个属性计算。因此,无需对其进行序列化,因为您可以计算客户端。

目前没有属性可以更改这些特定属性的序列化行为。但是,您可以编写自定义子生成器以在属性上添加/删除序列化属性。您将找到一个在属性(GitHub

上添加Json.NET特定属性的示例

以下是一些更改序列化行为的属性:

  • CodeFluentConcurrencyException(实体):确定此实体是否标记为可序列化
  • EntityDisplayName(实体):确定是否必须序列化EntityKey
  • serializable(实体):确定TypeName是否必须序列化
  • serializeEntityKey(财产):documentation
  • serializeTypeNameserializationMode(Property)=&gt;更喜欢使用dataMember
  • includeInSerialization(属性):定义序列化时此属性的排序顺序
  • serializationMode(属性):确定序列化时是否可以跳过属性
  • serializationOrder(Property):确定非序列化属性的私有字段是否可序列化
  • serializationNullable(项目):确定序列化回调方法是否公开(serializePrivateMemberpublicSerializationCallbacks等。)