Ejemplo n.º 1
0
 /// <inheritdoc/>
 public JToken Encode(Variant value, out BuiltInType builtinType,
                      ServiceMessageContext context)
 {
     if (value == Variant.Null)
     {
         builtinType = BuiltInType.Null;
         return(JValue.CreateNull());
     }
     using (var stream = new MemoryStream()) {
         using (var encoder = new JsonEncoderEx(stream,
                                                context ?? Context)
         {
             UseAdvancedEncoding = true
         }) {
             encoder.WriteVariant(nameof(value), value);
         }
         var json = Encoding.UTF8.GetString(stream.ToArray());
         try {
             var token = JToken.Parse(json);
             Enum.TryParse((string)token.SelectToken("value.Type"),
                           true, out builtinType);
             return(token.SelectToken("value.Body"));
         }
         catch (JsonReaderException jre) {
             throw new FormatException($"Failed to parse '{json}'. " +
                                       "See inner exception for more details.", jre);
         }
     }
 }
 /// <inheritdoc/>
 public VariantValue Encode(Variant?value, out BuiltInType builtinType)
 {
     if (value == null || value == Variant.Null)
     {
         builtinType = BuiltInType.Null;
         return(VariantValue.Null);
     }
     using (var stream = new MemoryStream()) {
         using (var encoder = new JsonEncoderEx(stream, Context)
         {
             UseAdvancedEncoding = true
         }) {
             encoder.WriteVariant(nameof(value), value.Value);
         }
         var token = Serializer.Parse(stream.ToArray());
         Enum.TryParse((string)token.GetByPath("value.Type"),
                       true, out builtinType);
         return(token.GetByPath("value.Body"));
     }
 }