示例#1
0
        private void DeterminePropertyName()
        {
            if (PropertyInfo == null)
            {
                return;
            }

            JsonPropertyNameAttribute nameAttribute = GetAttribute <JsonPropertyNameAttribute>(PropertyInfo);

            if (nameAttribute != null)
            {
                string name = nameAttribute.Name;
                if (name == null)
                {
                    ThrowHelper.ThrowInvalidOperationException_SerializerPropertyNameNull(ParentClassType, this);
                }

                NameAsString = name;
            }
            else if (Options.PropertyNamingPolicy != null)
            {
                string name = Options.PropertyNamingPolicy.ConvertName(PropertyInfo.Name);
                if (name == null)
                {
                    ThrowHelper.ThrowInvalidOperationException_SerializerPropertyNameNull(ParentClassType, this);
                }

                NameAsString = name;
            }
            else
            {
                NameAsString = PropertyInfo.Name;
            }

            Debug.Assert(NameAsString != null);

            // At this point propertyName is valid UTF16, so just call the simple UTF16->UTF8 encoder.
            Name = Encoding.UTF8.GetBytes(NameAsString);

            // Set the compare name.
            if (Options.PropertyNameCaseInsensitive)
            {
                NameUsedToCompareAsString = NameAsString.ToUpperInvariant();
                NameUsedToCompare         = Encoding.UTF8.GetBytes(NameUsedToCompareAsString);
            }
            else
            {
                NameUsedToCompareAsString = NameAsString;
                NameUsedToCompare         = Name;
            }

            // Cache the escaped name.
            EscapedName = JsonEncodedText.Encode(Name);
        }
示例#2
0
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (gvAccount.SelectedRow != null)
            {
                var  idStr = gvAccount.SelectedRow.Cells[1].Text;
                Guid id;
                if (Guid.TryParse(idStr, out id))
                {
                    var a = AccountManager.GetAccountById(id);

                    var account = new NameAsString
                    {
                        ID   = a.ID,
                        Name = a.NAME
                    };

                    ScriptManager.RegisterStartupScript(this, GetType(), "SELECTACCOUNT_"
                                                        + ClientID, "var selectedAccount  = '" + JsonConvert.SerializeObject(account) + "';", true);
                }
            }
        }
示例#3
0
        private void DeterminePropertyName(JsonSerializerOptions options)
        {
            if (PropertyInfo == null)
            {
                return;
            }

            JsonPropertyNameAttribute nameAttribute = GetAttribute <JsonPropertyNameAttribute>(PropertyInfo);

            if (nameAttribute != null)
            {
                string name = nameAttribute.Name;
                if (name == null)
                {
                    ThrowHelper.ThrowInvalidOperationException_SerializerPropertyNameNull(ParentClassType, this);
                }

                NameAsString = name;
            }
            else if (options.PropertyNamingPolicy != null)
            {
                string name = options.PropertyNamingPolicy.ConvertName(PropertyInfo.Name);
                if (name == null)
                {
                    ThrowHelper.ThrowInvalidOperationException_SerializerPropertyNameNull(ParentClassType, this);
                }

                NameAsString = name;
            }
            else
            {
                NameAsString = PropertyInfo.Name;
            }

            Debug.Assert(NameAsString != null);

            // At this point propertyName is valid UTF16, so just call the simple UTF16->UTF8 encoder.
            Name = Encoding.UTF8.GetBytes(NameAsString);

            // Set the compare name.
            if (options.PropertyNameCaseInsensitive)
            {
                NameUsedToCompareAsString = NameAsString.ToUpperInvariant();
                NameUsedToCompare         = Encoding.UTF8.GetBytes(NameUsedToCompareAsString);
            }
            else
            {
                NameUsedToCompareAsString = NameAsString;
                NameUsedToCompare         = Name;
            }

            // Cache the escaped name.
#if true
            // temporary behavior until the writer can accept escaped string.
            EscapedName = Name;
#else
            int valueIdx = JsonWriterHelper.NeedsEscaping(_name);
            if (valueIdx == -1)
            {
                _escapedName = _name;
            }
            else
            {
                byte[] pooledName = null;
                int    length     = JsonWriterHelper.GetMaxEscapedLength(_name.Length, valueIdx);

                Span <byte> escapedName = length <= JsonConstants.StackallocThreshold ?
                                          stackalloc byte[length] :
                                          (pooledName = ArrayPool <byte> .Shared.Rent(length));

                JsonWriterHelper.EscapeString(_name, escapedName, 0, out int written);

                _escapedName = escapedName.Slice(0, written).ToArray();

                if (pooledName != null)
                {
                    // We clear the array because it is "user data" (although a property name).
                    new Span <byte>(pooledName, 0, written).Clear();
                    ArrayPool <byte> .Shared.Return(pooledName);
                }
            }
#endif
        }
示例#4
0
        private void DeterminePropertyName(JsonSerializerOptions options)
        {
            if (PropertyInfo != null)
            {
                JsonPropertyNameAttribute nameAttribute = GetAttribute <JsonPropertyNameAttribute>();
                if (nameAttribute != null)
                {
                    NameAsString = nameAttribute.Name;

                    // This is detected and thrown by caller.
                    if (NameAsString == null)
                    {
                        return;
                    }
                }
                else if (options.PropertyNamingPolicy != null)
                {
                    NameAsString = options.PropertyNamingPolicy.ConvertName(PropertyInfo.Name);

                    // This is detected and thrown by caller.
                    if (NameAsString == null)
                    {
                        return;
                    }
                }
                else
                {
                    NameAsString = PropertyInfo.Name;
                }

                // At this point propertyName is valid UTF16, so just call the simple UTF16->UTF8 encoder.
                _name = Encoding.UTF8.GetBytes(NameAsString);

                // Set the compare name.
                if (options.PropertyNameCaseInsensitive)
                {
                    CompareNameAsString = NameAsString.ToUpperInvariant();
                    _compareName        = Encoding.UTF8.GetBytes(CompareNameAsString);
                }
                else
                {
                    CompareNameAsString = NameAsString;
                    _compareName        = _name;
                }

                // Cache the escaped name.
                int valueIdx = JsonWriterHelper.NeedsEscaping(_name);
                if (valueIdx == -1)
                {
                    _escapedName = _name;
                }
                else
                {
                    int length = JsonWriterHelper.GetMaxEscapedLength(_name.Length, valueIdx);

                    byte[] tempArray = ArrayPool <byte> .Shared.Rent(length);

                    JsonWriterHelper.EscapeString(_name, tempArray, valueIdx, out int written);
                    _escapedName = new byte[written];
                    tempArray.CopyTo(_escapedName, 0);

                    // We clear the array because it is "user data" (although a property name).
                    new Span <byte>(tempArray, 0, written).Clear();
                    ArrayPool <byte> .Shared.Return(tempArray);
                }
            }
        }