チェンジセット 1494 (default)


以下の違いを無視:
日時:
2020/11/09 19:24:00 (4年前)
更新者:
hizuya@…
ログメッセージ:
  • オブジェクトを Json データに変換する際に、JsonValueType にて型を指定できるようにした。
場所:
framework/trunk
ファイル:
3個の追加
10個の更新

凡例:

未変更
追加
削除
  • framework/trunk/CoreLibrary/CoreLibrary.csproj

    r1487 r1494  
    164164    <Compile Include="Sources\Json\JsonReadBuffer.cs" /> 
    165165    <Compile Include="Sources\Json\JsonReaderSettings.cs" /> 
     166    <Compile Include="Sources\Json\JsonValueType.cs" /> 
    166167    <Compile Include="Sources\Media\Configuration\MediaSection.cs" /> 
    167168    <Compile Include="Sources\Media\MediaManager.cs" /> 
  • framework/trunk/CoreLibrary/Properties/Resources.designer.cs

    r1487 r1494  
    674674         
    675675        /// <summary> 
     676        ///   Invalid member value type for a json member &apos;{0}&apos;. に類似しているローカライズされた文字列を検索します。 
     677        /// </summary> 
     678        internal static string Argument_JsonMemberInfo_InvalidMembetValueType { 
     679            get { 
     680                return ResourceManager.GetString("Argument_JsonMemberInfo_InvalidMembetValueType", resourceCulture); 
     681            } 
     682        } 
     683         
     684        /// <summary> 
    676685        ///   Cannot set to json member &apos;{1}&apos; of type &apos;{0}&apos;. に類似しているローカライズされた文字列を検索します。 
    677686        /// </summary> 
     
    17561765            get { 
    17571766                return ResourceManager.GetString("Format_SqlStatementVariablePart_InvalidVariableSyntax", resourceCulture); 
     1767            } 
     1768        } 
     1769         
     1770        /// <summary> 
     1771        ///   Value type is invalid. に類似しているローカライズされた文字列を検索します。 
     1772        /// </summary> 
     1773        internal static string InvalidCast_JsonOperator_InvalidValueType { 
     1774            get { 
     1775                return ResourceManager.GetString("InvalidCast_JsonOperator_InvalidValueType", resourceCulture); 
     1776            } 
     1777        } 
     1778         
     1779        /// <summary> 
     1780        ///   Value is not boolean. に類似しているローカライズされた文字列を検索します。 
     1781        /// </summary> 
     1782        internal static string InvalidCast_JsonWriter_IsNotBoolean { 
     1783            get { 
     1784                return ResourceManager.GetString("InvalidCast_JsonWriter_IsNotBoolean", resourceCulture); 
     1785            } 
     1786        } 
     1787         
     1788        /// <summary> 
     1789        ///   Value is not number. に類似しているローカライズされた文字列を検索します。 
     1790        /// </summary> 
     1791        internal static string InvalidCast_JsonWriter_IsNotNumber { 
     1792            get { 
     1793                return ResourceManager.GetString("InvalidCast_JsonWriter_IsNotNumber", resourceCulture); 
    17581794            } 
    17591795        } 
  • framework/trunk/CoreLibrary/Properties/Resources.resx

    r1487 r1494  
    11<?xml version="1.0" encoding="utf-8"?> 
    22<root> 
    3   <!--  
    4     Microsoft ResX Schema  
    5      
     3  <!-- 
     4    Microsoft ResX Schema 
     5 
    66    Version 2.0 
    7      
    8     The primary goals of this format is to allow a simple XML format  
    9     that is mostly human readable. The generation and parsing of the  
    10     various data types are done through the TypeConverter classes  
     7 
     8    The primary goals of this format is to allow a simple XML format 
     9    that is mostly human readable. The generation and parsing of the 
     10    various data types are done through the TypeConverter classes 
    1111    associated with the data types. 
    12      
     12 
    1313    Example: 
    14      
     14 
    1515    ... ado.net/XML headers & schema ... 
    1616    <resheader name="resmimetype">text/microsoft-resx</resheader> 
     
    2727        <comment>This is a comment</comment> 
    2828    </data> 
    29                  
    30     There are any number of "resheader" rows that contain simple  
     29 
     30    There are any number of "resheader" rows that contain simple 
    3131    name/value pairs. 
    32      
    33     Each data row contains a name, and value. The row also contains a  
    34     type or mimetype. Type corresponds to a .NET class that support  
    35     text/value conversion through the TypeConverter architecture.  
    36     Classes that don't support this are serialized and stored with the  
     32 
     33    Each data row contains a name, and value. The row also contains a 
     34    type or mimetype. Type corresponds to a .NET class that support 
     35    text/value conversion through the TypeConverter architecture. 
     36    Classes that don't support this are serialized and stored with the 
    3737    mimetype set. 
    38      
    39     The mimetype is used for serialized objects, and tells the  
    40     ResXResourceReader how to depersist the object. This is currently not  
     38 
     39    The mimetype is used for serialized objects, and tells the 
     40    ResXResourceReader how to depersist the object. This is currently not 
    4141    extensible. For a given mimetype the value must be set accordingly: 
    42      
    43     Note - application/x-microsoft.net.object.binary.base64 is the format  
    44     that the ResXResourceWriter will generate, however the reader can  
     42 
     43    Note - application/x-microsoft.net.object.binary.base64 is the format 
     44    that the ResXResourceWriter will generate, however the reader can 
    4545    read any of the formats listed below. 
    46      
     46 
    4747    mimetype: application/x-microsoft.net.object.binary.base64 
    48     value   : The object must be serialized with  
     48    value   : The object must be serialized with 
    4949            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
    5050            : and then encoded with base64 encoding. 
    51      
     51 
    5252    mimetype: application/x-microsoft.net.object.soap.base64 
    53     value   : The object must be serialized with  
     53    value   : The object must be serialized with 
    5454            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter 
    5555            : and then encoded with base64 encoding. 
    5656 
    5757    mimetype: application/x-microsoft.net.object.bytearray.base64 
    58     value   : The object must be serialized into a byte array  
     58    value   : The object must be serialized into a byte array 
    5959            : using a System.ComponentModel.TypeConverter 
    6060            : and then encoded with base64 encoding. 
     
    900900    <value>Cannot get value for a json member '{0}'.</value> 
    901901  </data> 
     902  <data name="Argument_JsonMemberInfo_InvalidMembetValueType" xml:space="preserve"> 
     903    <value>Invalid member value type for a json member '{0}'.</value> 
     904  </data> 
    902905  <data name="Argument_JsonOperator_CannotSetValue" xml:space="preserve"> 
    903906    <value>Cannot set to json member '{1}' of type '{0}'.</value> 
     
    13321335    <value>The given key was not present in the dictionary.</value> 
    13331336  </data> 
     1337  <data name="InvalidCast_JsonWriter_IsNotBoolean" xml:space="preserve"> 
     1338    <value>Value is not boolean.</value> 
     1339  </data> 
     1340  <data name="InvalidCast_JsonWriter_IsNotNumber" xml:space="preserve"> 
     1341    <value>Value is not number.</value> 
     1342  </data> 
     1343  <data name="InvalidCast_JsonOperator_InvalidValueType" xml:space="preserve"> 
     1344    <value>Value type is invalid.</value> 
     1345  </data> 
    13341346</root> 
  • framework/trunk/CoreLibrary/Sources/Json/JsonMemberAttribute.cs

    r1085 r1494  
    4444 
    4545        /// <summary> 
    46         /// 対応するメンバの値が JSON 形式かどうか。 
    47         /// </summary> 
    48         [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    49         private bool isRawValue; 
     46        /// JSON の値の型。 
     47        /// </summary> 
     48        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
     49        private JsonValueType valueType; 
     50 
     51        /// <summary> 
     52        /// 書式文字列。 
     53        /// </summary> 
     54        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
     55        private string format; 
    5056 
    5157        /// <summary> 
     
    5460        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    5561        private Type type; 
    56  
    57         /// <summary> 
    58         /// コレクションかどうか。 
    59         /// </summary> 
    60         [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    61         private bool isCollection; 
    6262 
    6363        /// <summary> 
     
    120120 
    121121        /// <summary> 
     122        /// JSON の値の型を取得または設定します。 
     123        /// </summary> 
     124        /// <value> 
     125        /// JSON の値の型。 
     126        /// 既定値は <c>JsonValueType.Auto</c> です。 
     127        /// </value> 
     128        public JsonValueType ValueType 
     129        { 
     130            get 
     131            { 
     132                return valueType; 
     133            } 
     134 
     135            set 
     136            { 
     137                valueType = value; 
     138            } 
     139        } 
     140 
     141        /// <summary> 
     142        /// 書式文字列を取得または設定します。 
     143        /// </summary> 
     144        /// <value> 
     145        /// 書式文字列。 
     146        /// </value> 
     147        public string Format 
     148        { 
     149            get 
     150            { 
     151                return format; 
     152            } 
     153 
     154            set 
     155            { 
     156                format = value; 
     157            } 
     158        } 
     159 
     160        /// <summary> 
    122161        /// 対応するメンバの値が JSON 形式かどうかを取得または設定します。 
    123162        /// </summary> 
     
    130169        /// <see cref="IsCollection"/> が <see langword="true"/> にもかかわらず値を <see langword="true"/> 設定しました。 
    131170        /// </exception> 
     171        [Obsolete("use ValueType = JsonValueType.Raw", false)] 
    132172        public bool IsRawValue 
    133173        { 
    134174            get 
    135175            { 
    136                 return isRawValue; 
    137             } 
    138  
    139             set 
    140             { 
    141                 if (isCollection) 
     176                return valueType == JsonValueType.Raw; 
     177            } 
     178 
     179            set 
     180            { 
     181                if (valueType == JsonValueType.Array) 
    142182                { 
    143183                    throw new ArgumentException(Resources.Argument_JsonMemberAttribute_CannotSetRawValue, "value"); 
    144184                } 
    145185 
    146                 isRawValue = value; 
     186                valueType = JsonValueType.Raw; 
    147187            } 
    148188        } 
     
    182222        /// <see cref="IsRawValue"/> が <see langword="true"/> にもかかわらず値を <see langword="true"/> 設定しました。 
    183223        /// </exception> 
     224        [Obsolete("use ValueType = JsonValueType.Array", false)] 
    184225        public bool IsCollection 
    185226        { 
    186227            get 
    187228            { 
    188                 return isCollection; 
    189             } 
    190  
    191             set 
    192             { 
    193                 if (isRawValue) 
     229                return valueType == JsonValueType.Array; 
     230            } 
     231 
     232            set 
     233            { 
     234                if (valueType == JsonValueType.Raw) 
    194235                { 
    195236                    throw new ArgumentException(Resources.Argument_JsonMemberAttribute_CannotCollection, "value"); 
    196237                } 
    197238 
    198                 isCollection = value; 
     239                valueType = JsonValueType.Array; 
    199240            } 
    200241        } 
     
    240281            } 
    241282        } 
     283 
     284        /// <summary> 
     285        /// 値が配列かどうかを返します。 
     286        /// </summary> 
     287        /// <value> 
     288        /// 値が配列の場合は <see langword="true"/>。 
     289        /// それ以外の場合は <see langword="false"/>。 
     290        /// </value> 
     291        internal bool IsArray 
     292        { 
     293            get 
     294            { 
     295                return valueType == JsonValueType.Array 
     296                    || (valueType == JsonValueType.Auto && collectionType != null); 
     297            } 
     298        } 
    242299    } 
    243300} 
  • framework/trunk/CoreLibrary/Sources/Json/JsonMemberInfo.cs

    r1469 r1494  
    8888        /// <exception cref="ArgumentException"> 
    8989        /// <paramref name="memberInfo"/> がプロパティでもフィールドでもありません。 
    90         /// またはメンバの <see cref="JsonMemberAttribute.IsCollection"/> が <see langword="true"/> 
    91         /// に指定されていますが、コレクションの要素の型が不明です。 
     90        /// またはメンバの値として配列が指定されていますが、コレクションの要素の型が不明です。 
    9291        /// </exception> 
    9392        /// <exception cref="TypeDeclarationException"> 
     
    9998        { 
    10099            // コレクションの場合 
    101             if (MemberAttribute.IsCollection) 
     100            if (MemberAttribute.IsArray) 
    102101            { 
    103102                instanceType = MemberAttribute.CollectionType ?? MemberValueAccessor.Type; 
     
    117116            else 
    118117            { 
     118                JsonValueType valueType = MemberAttribute.ValueType; 
     119 
    119120                instanceType = MemberAttribute.Type ?? MemberValueAccessor.Type; 
     121                isRawValue 
     122                    = valueType == JsonValueType.Raw 
     123                    || (valueType == JsonValueType.Auto && typeof(IJsonRawValue).IsAssignableFrom(MemberValueAccessor.Type)); 
    120124            } 
    121125 
    122126            instanceTypeConverter = TypeExtendedDescriptor.GetConverter(memberInfo, instanceType); 
    123             isRawValue 
    124                 = MemberAttribute.IsRawValue 
    125                 || typeof(IJsonRawValue).IsAssignableFrom(MemberValueAccessor.Type); 
    126127        } 
    127128 
     
    194195 
    195196            writer.WritePropertyName(Name); 
    196             JsonOperator.Write(writer, value, isRawValue); 
     197            try 
     198            { 
     199                JsonOperator.Write(writer, value, isRawValue ? JsonValueType.Raw : MemberAttribute.ValueType, MemberAttribute.Format); 
     200            } 
     201            catch (InvalidCastException ex) 
     202            { 
     203                throw new ArgumentException( 
     204                    string.Format( 
     205                        CultureInfo.CurrentCulture, 
     206                        Resources.Argument_JsonMemberInfo_InvalidMembetValueType, 
     207                        Name), 
     208                    "bean", 
     209                    ex); 
     210            } 
    197211        } 
    198212 
     
    334348            Debug.Assert(!isRawValue, "Member type is raw value."); 
    335349 
    336             if (!MemberAttribute.IsCollection) 
     350            if (!MemberAttribute.IsArray) 
    337351            { 
    338352                throw new FormatException( 
     
    369383            Debug.Assert(!isRawValue, "Member type is raw value."); 
    370384 
    371             if (MemberAttribute.IsCollection) 
     385            if (MemberAttribute.IsArray) 
    372386            { 
    373387                throw new FormatException( 
  • framework/trunk/CoreLibrary/Sources/Json/JsonOperator.cs

    r1491 r1494  
    931931            using (JsonWriter jsonWriter = new JsonWriter(writer, settings)) 
    932932            { 
    933                 WriteImpl(jsonWriter, source, source is IJsonRawValue); 
     933                // ReSharper disable once ExceptionNotDocumented 
     934                WriteImpl(jsonWriter, source, JsonValueType.Auto, null); 
    934935            } 
    935936        } 
     
    946947        /// 任意のオブジェクト。 
    947948        /// </param> 
    948         /// <param name="isRawValue"> 
    949         /// <paramref name="source"/> の値が JSON 形式かどうか。 
    950         /// </param> 
    951         internal static void Write(JsonWriter writer, object source, bool isRawValue) 
    952         { 
    953             WriteImpl(writer, source, isRawValue); 
     949        /// <param name="valueType"> 
     950        /// 出力する値の形式。 
     951        /// </param> 
     952        /// <param name="format"> 
     953        /// 書式文字列。 
     954        /// </param> 
     955        /// <exception cref="InvalidCastException"> 
     956        /// <paramref name="source"/> が <paramref name="valueType"/> に変換できる型ではありません。 
     957        /// </exception> 
     958        internal static void Write(JsonWriter writer, object source, JsonValueType valueType, string format) 
     959        { 
     960            WriteImpl(writer, source, valueType, format); 
    954961        } 
    955962 
     
    13681375        /// 出力するオブジェクト。 
    13691376        /// </param> 
    1370         /// <param name="isRawValue"> 
    1371         /// <paramref name="source"/> の値が JSON 形式かどうか。 
    1372         /// </param> 
    1373         private static void WriteImpl(JsonWriter writer, object source, bool isRawValue) 
     1377        /// <param name="valueType"> 
     1378        /// 出力する値の形式。 
     1379        /// </param> 
     1380        /// <param name="format"> 
     1381        /// 書式文字列。 
     1382        /// </param> 
     1383        /// <exception cref="InvalidCastException"> 
     1384        /// <paramref name="source"/> が <paramref name="valueType"/> に変換できる型ではありません。 
     1385        /// </exception> 
     1386        private static void WriteImpl(JsonWriter writer, object source, JsonValueType valueType, string format) 
    13741387        { 
    13751388            // null の場合 
     
    13811394 
    13821395            // すでに JSON フォーマットの場合 
    1383             if (isRawValue) 
     1396            if (valueType == JsonValueType.Raw 
     1397                || (valueType == JsonValueType.Auto && source is IJsonRawValue)) 
    13841398            { 
    13851399                writer.WriteRawValue(source.ToString()); 
     
    13871401            } 
    13881402 
    1389             // 文字列の場合 (String は IEnumerable を実装しているので要別扱い) 
    1390             string sourceString = source as string; 
    1391             if (sourceString != null) 
    1392             { 
    1393                 writer.WriteLiteral(sourceString); 
    1394                 return; 
    1395             } 
    1396  
    1397             IEnumerable enumerable = source as IEnumerable; 
    1398  
    1399             // コレクションではない場合 
    1400             if (enumerable == null) 
    1401             { 
     1403            switch (valueType) 
     1404            { 
     1405                case JsonValueType.Auto: 
     1406                    { 
     1407                        // 文字列の場合 (String は IEnumerable を実装しているので特別扱い) 
     1408                        string sourceString = source as string; 
     1409                        if (sourceString != null) 
     1410                        { 
     1411                            writer.WriteLiteral(sourceString); 
     1412                            return; 
     1413                        } 
     1414 
     1415                        // 文字列として出力 
     1416                        if (format != null) 
     1417                        { 
     1418                            writer.WriteStringLiteral(source, format); 
     1419                            return; 
     1420                        } 
     1421 
     1422                        break; 
     1423                    } 
     1424 
     1425                case JsonValueType.Boolean: 
     1426                    writer.WriteBooleanLiteral(source); 
     1427                    return; 
     1428 
     1429                case JsonValueType.Number: 
     1430                    writer.WriteNumberLiteral(source); 
     1431                    return; 
     1432 
     1433                case JsonValueType.String: 
     1434                    writer.WriteStringLiteral(source, format); 
     1435                    return; 
     1436            } 
     1437 
     1438            // オブジェクト構造として出力してみる 
     1439            if (valueType == JsonValueType.Auto || valueType == JsonValueType.Object) 
     1440            { 
     1441                // JSON ビーンの場合 
    14021442                Type type = source.GetType(); 
    1403  
    1404                 // JSON ビーンの場合 
    14051443                if (Attribute.IsDefined(type, typeof(JsonBeanAttribute))) 
    14061444                { 
     
    14091447                } 
    14101448 
    1411                 // それ以外の場合 
     1449                // 辞書を実装している場合 
     1450                IDictionary dictionary = source as IDictionary; 
     1451                if (dictionary != null) 
     1452                { 
     1453                    WriteObjectStructure(writer, dictionary.GetEnumerator()); 
     1454                    return; 
     1455                } 
     1456            } 
     1457 
     1458            IEnumerable enumerable = source as IEnumerable; 
     1459            if (enumerable != null) 
     1460            { 
     1461                IEnumerator enumerator = enumerable.GetEnumerator(); 
     1462 
     1463                if (valueType == JsonValueType.Auto || valueType == JsonValueType.Object) 
     1464                { 
     1465                    // 辞書の列挙が出来る場合 
     1466                    IDictionaryEnumerator dictionaryEnumerator = enumerator as IDictionaryEnumerator; 
     1467                    if (dictionaryEnumerator != null) 
     1468                    { 
     1469                        WriteObjectStructure(writer, dictionaryEnumerator); 
     1470                        return; 
     1471                    } 
     1472                } 
     1473 
     1474                if (valueType == JsonValueType.Auto || valueType == JsonValueType.Array) 
     1475                { 
     1476                    // 辞書以外のコレクションの場合 
     1477                    WriteArrayStructure(writer, enumerator); 
     1478                    return; 
     1479                } 
     1480            } 
     1481 
     1482            if (valueType == JsonValueType.Auto) 
     1483            { 
    14121484                writer.WriteLiteral(source); 
    14131485                return; 
    14141486            } 
    14151487 
    1416  
    1417             // 辞書を実装している場合 
    1418             IDictionary dictionary = source as IDictionary; 
    1419             if (dictionary != null) 
    1420             { 
    1421                 WriteObjectStructure(writer, dictionary.GetEnumerator()); 
    1422                 return; 
    1423             } 
    1424  
    1425             IEnumerator enumerator = enumerable.GetEnumerator(); 
    1426  
    1427             // 辞書の列挙が出来る場合 
    1428             IDictionaryEnumerator dictionaryEnumerator = enumerator as IDictionaryEnumerator; 
    1429             if (dictionaryEnumerator != null) 
    1430             { 
    1431                 WriteObjectStructure(writer, dictionaryEnumerator); 
    1432                 return; 
    1433             } 
    1434  
    1435             // 辞書以外のコレクションの場合 
    1436             WriteArrayStructure(writer, enumerator); 
     1488            // それ以外の場合 
     1489            throw new InvalidCastException(Resources.InvalidCast_JsonOperator_InvalidValueType); 
    14371490        } 
    14381491 
     
    14511504            while (enumerator.MoveNext()) 
    14521505            { 
    1453                 WriteImpl(writer, enumerator.Current, enumerator.Current is IJsonRawValue); 
     1506                WriteImpl(writer, enumerator.Current, JsonValueType.Auto, null); 
    14541507            } 
    14551508 
     
    14721525            { 
    14731526                writer.WritePropertyName(enumerator.Key.ToString()); 
    1474                 WriteImpl(writer, enumerator.Value, enumerator.Value is IJsonRawValue); 
     1527                WriteImpl(writer, enumerator.Value, JsonValueType.Auto, null); 
    14751528            } 
    14761529 
  • framework/trunk/CoreLibrary/Sources/Json/JsonWriter.cs

    r1469 r1494  
    804804        /// 出力する値。 
    805805        /// </param> 
    806         /// <remarks> 
    807         /// u0000-u001F 間の CR (u000D)、LF (0u000A) を除く文字が 
    808         /// エスケープされません。 
    809         /// </remarks> 
    810806        public virtual void WriteLiteral(string value) 
    811807        { 
     
    858854            Write(value); 
    859855            WroteMember(); 
     856        } 
     857 
     858        /// <summary> 
     859        /// 真偽値リテラルとして出力します。 
     860        /// </summary> 
     861        /// <param name="value"> 
     862        /// 出力する値。 
     863        /// </param> 
     864        /// <exception cref="InvalidCastException"> 
     865        /// <paramref name="value"/> が数値ではありません。 
     866        /// </exception> 
     867        public virtual void WriteBooleanLiteral(object value) 
     868        { 
     869            if (value == null) 
     870            { 
     871                WriteNullLiteral(); 
     872            } 
     873            else if (value is bool) 
     874            { 
     875                WriteLiteral((bool)value); 
     876            } 
     877            else if (value is byte) 
     878            { 
     879                WriteLiteral((byte)value != 0); 
     880            } 
     881            else if (value is sbyte) 
     882            { 
     883                WriteLiteral((sbyte)value != 0); 
     884            } 
     885            else if (value is short) 
     886            { 
     887                WriteLiteral((short)value != 0); 
     888            } 
     889            else if (value is ushort) 
     890            { 
     891                WriteLiteral((ushort)value != 0); 
     892            } 
     893            else if (value is int) 
     894            { 
     895                WriteLiteral((int)value != 0); 
     896            } 
     897            else if (value is uint) 
     898            { 
     899                WriteLiteral((uint)value != 0); 
     900            } 
     901            else if (value is long) 
     902            { 
     903                WriteLiteral((long)value != 0); 
     904            } 
     905            else if (value is ulong) 
     906            { 
     907                WriteLiteral((ulong)value != 0); 
     908            } 
     909            else if (value is float) 
     910            { 
     911                // ReSharper disable once CompareOfFloatsByEqualityOperator 
     912                WriteLiteral((float)value != 0); 
     913            } 
     914            else if (value is double) 
     915            { 
     916                // ReSharper disable once CompareOfFloatsByEqualityOperator 
     917                WriteLiteral((double)value != 0); 
     918            } 
     919            else if (value is decimal) 
     920            { 
     921                WriteLiteral((decimal)value != 0); 
     922            } 
     923            else 
     924            { 
     925                throw new InvalidCastException(Resources.InvalidCast_JsonWriter_IsNotBoolean); 
     926            } 
     927        } 
     928 
     929        /// <summary> 
     930        /// 数値リテラルとして出力します。 
     931        /// </summary> 
     932        /// <param name="value"> 
     933        /// 出力する値。 
     934        /// </param> 
     935        /// <exception cref="InvalidCastException"> 
     936        /// <paramref name="value"/> が数値ではありません。 
     937        /// </exception> 
     938        public virtual void WriteNumberLiteral(object value) 
     939        { 
     940            if (value == null) 
     941            { 
     942                WriteNullLiteral(); 
     943            } 
     944            else if (value is bool) 
     945            { 
     946                WriteLiteral((bool)value ? 1 : 0); 
     947            } 
     948            else if (value is byte) 
     949            { 
     950                WriteLiteral((byte)value); 
     951            } 
     952            else if (value is sbyte) 
     953            { 
     954                WriteLiteral((sbyte)value); 
     955            } 
     956            else if (value is short) 
     957            { 
     958                WriteLiteral((short)value); 
     959            } 
     960            else if (value is ushort) 
     961            { 
     962                WriteLiteral((ushort)value); 
     963            } 
     964            else if (value is int) 
     965            { 
     966                WriteLiteral((int)value); 
     967            } 
     968            else if (value is uint) 
     969            { 
     970                WriteLiteral((uint)value); 
     971            } 
     972            else if (value is long) 
     973            { 
     974                WriteLiteral((long)value); 
     975            } 
     976            else if (value is ulong) 
     977            { 
     978                WriteLiteral((ulong)value); 
     979            } 
     980            else if (value is float) 
     981            { 
     982                WriteLiteral((float)value); 
     983            } 
     984            else if (value is double) 
     985            { 
     986                WriteLiteral((double)value); 
     987            } 
     988            else if (value is decimal) 
     989            { 
     990                WriteLiteral((decimal)value); 
     991            } 
     992            else 
     993            { 
     994                throw new InvalidCastException(Resources.InvalidCast_JsonWriter_IsNotNumber); 
     995            } 
     996        } 
     997 
     998        /// <summary> 
     999        /// 文字列リテラルとして出力します。 
     1000        /// </summary> 
     1001        /// <param name="value"> 
     1002        /// 出力する値。 
     1003        /// </param> 
     1004        public virtual void WriteStringLiteral(object value) 
     1005        { 
     1006            WriteStringLiteral(value, null); 
     1007        } 
     1008 
     1009        /// <summary> 
     1010        /// 文字列リテラルとして出力します。 
     1011        /// </summary> 
     1012        /// <param name="value"> 
     1013        /// 出力する値。 
     1014        /// </param> 
     1015        /// <param name="format"> 
     1016        /// 書式文字列。 
     1017        /// </param> 
     1018        public virtual void WriteStringLiteral(object value, string format) 
     1019        { 
     1020            if (value == null) 
     1021            { 
     1022                WriteNullLiteral(); 
     1023            } 
     1024 
     1025            if (format != null) 
     1026            { 
     1027                IFormattable formattable = value as IFormattable; 
     1028                if (formattable != null) 
     1029                { 
     1030                    WriteLiteral(formattable.ToString(format, FormatProvider)); 
     1031                    return; 
     1032                } 
     1033            } 
     1034 
     1035            WriteLiteral(value.ToString()); 
    8601036        } 
    8611037 
  • framework/trunk/CoreTest/CoreTest.csproj

    r1487 r1494  
    5959    <Compile Include="Properties\AssemblyInfo.cs" /> 
    6060    <Compile Include="Sources\Json\JsonEnumBean.cs" /> 
     61    <Compile Include="Sources\Json\JsonOperatorForWriteWithValueTypeTest.cs" /> 
    6162    <Compile Include="Sources\Json\JsonTestEnum.cs" /> 
     63    <Compile Include="Sources\Json\JsonValueTypeBean.cs" /> 
    6264    <Compile Include="Sources\Validator\ValidationNullableBean.cs" /> 
    6365    <Compile Include="Sources\Validator\ValidationSimpleBean.cs" /> 
  • framework/trunk/CoreTest/Sources/Diagnostics/CommandLineArgumentParserTest.cs

    r1489 r1494  
    886886        { 
    887887#pragma warning disable 649 // CS0649 xxx は割り当てられません。常に既定値 null を使用します。 
     888#pragma warning disable 169 // CS0169 フィールド xxx は使用されませんでした。 
    888889 
    889890            /// <summary> 
     
    902903 
    903904#pragma warning restore 649 
     905#pragma warning restore 169 
    904906 
    905907            /// <summary> 
  • framework/trunk/CoreTest/Sources/Json/JsonNormalBean.cs

    r1325 r1494  
    292292        /// JSON 文字列。 
    293293        /// </value> 
    294         [JsonMember("raw", IsRawValue = true)] 
     294        [JsonMember("raw", ValueType = JsonValueType.Raw)] 
    295295        public string Raw 
    296296        { 
     
    312312        /// 文字列のリスト。 
    313313        /// </value> 
    314         [JsonMember("list1", IsCollection = true, CollectionType = typeof(List<string>))] 
     314        [JsonMember("list1", CollectionType = typeof(List<string>))] 
    315315        public IList<string> StringList 
    316316        { 
詳しい使い方は TracChangeset を参照してください。