当前位置: 首页>>代码示例>>C#>>正文


C# IDynamicMetaObjectProvider.GetDynamicMemberNames方法代码示例

本文整理汇总了C#中IDynamicMetaObjectProvider.GetDynamicMemberNames方法的典型用法代码示例。如果您正苦于以下问题:C# IDynamicMetaObjectProvider.GetDynamicMemberNames方法的具体用法?C# IDynamicMetaObjectProvider.GetDynamicMemberNames怎么用?C# IDynamicMetaObjectProvider.GetDynamicMemberNames使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IDynamicMetaObjectProvider的用法示例。


在下文中一共展示了IDynamicMetaObjectProvider.GetDynamicMemberNames方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: SerializeDynamic

    private void SerializeDynamic(JsonWriter writer, IDynamicMetaObjectProvider value, JsonDynamicContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
    {
      OnSerializing(writer, contract, value);
      _serializeStack.Add(value);

      WriteObjectStart(writer, value, contract, member, collectionContract, containerProperty);

      int initialDepth = writer.Top;

      for (int index = 0; index < contract.Properties.Count; index++)
      {
        JsonProperty property = contract.Properties[index];

        // only write non-dynamic properties that have an explicit attribute
        if (property.HasMemberAttribute)
        {
          try
          {
            object memberValue;
            JsonContract memberContract;

            if (!CalculatePropertyValues(writer, value, contract, member, property, out memberContract, out memberValue))
              continue;

            property.WritePropertyName(writer);
            SerializeValue(writer, memberValue, memberContract, property, contract, member);
          }
          catch (Exception ex)
          {
            if (IsErrorHandled(value, contract, property.PropertyName, null, writer.ContainerPath, ex))
              HandleError(writer, initialDepth);
            else
              throw;
          }
        }
      }

      foreach (string memberName in value.GetDynamicMemberNames())
      {
        object memberValue;
        if (contract.TryGetMember(value, memberName, out memberValue))
        {
          try
          {
            JsonContract valueContract = GetContractSafe(memberValue);

            if (!ShouldWriteDynamicProperty(memberValue))
              continue;

            if (CheckForCircularReference(writer, memberValue, null, valueContract, contract, member))
            {
              string resolvedPropertyName = (contract.PropertyNameResolver != null)
                                              ? contract.PropertyNameResolver(memberName)
                                              : memberName;

              writer.WritePropertyName(resolvedPropertyName);
              SerializeValue(writer, memberValue, valueContract, null, contract, member);
            }
          }
          catch (Exception ex)
          {
            if (IsErrorHandled(value, contract, memberName, null, writer.ContainerPath, ex))
              HandleError(writer, initialDepth);
            else
              throw;
          }
        }
      }

      writer.WriteEndObject();

      _serializeStack.RemoveAt(_serializeStack.Count - 1);
      OnSerialized(writer, contract, value);
    }
开发者ID:EnergonV,项目名称:BestCS,代码行数:74,代码来源:JsonSerializerInternalWriter.cs

示例2: SerializeDynamic

    private void SerializeDynamic(JsonWriter writer, IDynamicMetaObjectProvider value, JsonDynamicContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
    {
      contract.InvokeOnSerializing(value, Serializer.Context);
      _serializeStack.Add(value);

      WriteObjectStart(writer, value, contract, member, collectionContract, containerProperty);

      int initialDepth = writer.Top;

      foreach (JsonProperty property in contract.Properties)
      {
        // only write non-dynamic properties that have an explicit attribute
        if (property.HasMemberAttribute)
        {
          try
          {
            object memberValue;
            JsonContract memberContract;

            if (!CalculatePropertyValues(writer, value, contract, member, property, out memberContract, out memberValue))
              continue;

            writer.WritePropertyName(property.PropertyName);
            SerializeValue(writer, memberValue, memberContract, property, contract, member);
          }
          catch (Exception ex)
          {
            if (IsErrorHandled(value, contract, property.PropertyName, writer.ContainerPath, ex))
              HandleError(writer, initialDepth);
            else
              throw;
          }
        }
      }

      foreach (string memberName in value.GetDynamicMemberNames())
      {
        object memberValue;
        if (value.TryGetMember(memberName, out memberValue))
        {
          try
          {
            string resolvedPropertyName = (contract.PropertyNameResolver != null)
                                            ? contract.PropertyNameResolver(memberName)
                                            : memberName;

            writer.WritePropertyName(resolvedPropertyName);
            SerializeValue(writer, memberValue, GetContractSafe(memberValue), null, null, member);
          }
          catch (Exception ex)
          {
            if (IsErrorHandled(value, contract, memberName, writer.ContainerPath, ex))
              HandleError(writer, initialDepth);
            else
              throw;
          }
        }
      }

      writer.WriteEndObject();

      _serializeStack.RemoveAt(_serializeStack.Count - 1);
      contract.InvokeOnSerialized(value, Serializer.Context);
    }
开发者ID:draptik,项目名称:RepoSync,代码行数:64,代码来源:JsonSerializerInternalWriter.cs

示例3: SerializeDynamic

	/// <summary>
	/// Serializes the dynamic.
	/// </summary>
	/// <param name="writer">The writer.</param>
	/// <param name="value">The value.</param>
	/// <param name="contract">The contract.</param>
	private void SerializeDynamic(JsonWriter writer, IDynamicMetaObjectProvider value, JsonDynamicContract contract)
	{
		contract.InvokeOnSerializing(value, Serializer.Context);
		SerializeStack.Add(value);

		writer.WriteStartObject();

		foreach (string memberName in value.GetDynamicMemberNames())
		{
		object memberValue;
		if (DynamicUtils.TryGetMember(value, memberName, out memberValue))
		{
			string resolvedPropertyName = (contract.PropertyNameResolver != null)
			? contract.PropertyNameResolver(memberName)
			: memberName;
			
			writer.WritePropertyName(resolvedPropertyName);
			SerializeValue(writer, memberValue, GetContractSafe(memberValue), null, null);
		}
		}

		writer.WriteEndObject();

		SerializeStack.RemoveAt(SerializeStack.Count - 1);
		contract.InvokeOnSerialized(value, Serializer.Context);
	}
开发者ID:ThePiachu,项目名称:BitNet,代码行数:32,代码来源:JsonSerializerInternalWriter.cs


注:本文中的IDynamicMetaObjectProvider.GetDynamicMemberNames方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。