コード例 #1
0
        public string Serialize(object value, string accept, Stream destination)
        {
            //fast path
            if (accept == "application/json" || accept == null)
            {
                Json.Serialize(value, destination, false);
                return("application/json");
            }
            if (accept == "application/json;minimal")
            {
                Json.Serialize(value, destination, true);
                return("application/json");
            }
#if !NETSTANDARD2_0
            if (accept == "application/x-protobuf")
            {
                Protobuf.Serialize(value, destination);
                return("application/x-protobuf");
            }
            if (accept == "application/xml")
            {
                Xml.Serialize(value, destination);
                return("application/xml");
            }
#endif
            if (accept.StartsWith("application/json", StringComparison.Ordinal))
            {
                Json.Serialize(value, destination, false);
                return("application/json");
            }
            //Slow path
            accept = (accept ?? "application/json").ToLowerInvariant();
            if (accept.Contains("application/json"))
            {
                Json.Serialize(value, destination, false);
                return("application/json");
            }
#if !NETSTANDARD2_0
            if (accept.Contains("application/xml"))
            {
                Xml.Serialize(value, destination);
                return("application/xml");
            }
            if (accept.Contains("application/x-protobuf"))
            {
                Protobuf.Serialize(value, destination);
                return("application/x-protobuf");
            }
#endif
            Json.Serialize(value, destination, false);
            return("application/json");
        }
コード例 #2
0
        private object Deserialize(Type type, XmlReader reader, StreamingContext context)
        {
            using (var dict = XmlDictionaryReader.CreateDictionaryReader(reader))
            {
                var serializer = new DataContractSerializer(type);
                var result     = serializer.ReadObject(dict, false, GenericResolver);
                if (context.Context == null)
                {
                    return(result);
                }
                //TODO NO need for actual xml serializer now
                //implement recursive descent and provide context to all objects
                using (var cms = ChunkedMemoryStream.Create())
                {
#if NETSTANDARD2_0
                    try
                    {
                        Json.Serialize(result, cms, true);
                        cms.Position = 0;
                        return(Json.Deserialize(cms, type, context));
#else
                    var ns = new NetDataContractSerializer(context);
                    try
                    {
                        ns.Serialize(cms, result);
                        cms.Position = 0;
                        ns.Binder    = GenericBinder;
                        return(ns.Deserialize(cms));
#endif
                    }
                    catch (Exception ex)
                    {
                        TraceSource.TraceEvent(TraceEventType.Error, 5202, "{0}", ex);
                        TraceSource.TraceEvent(TraceEventType.Verbose, 5202, "{0}", cms);
                        throw;
                    }
                }
            }
        }
コード例 #3
0
ファイル: WireSerialization.cs プロジェクト: vp-sabbad/revenj
 public string Serialize(object value, string accept, Stream destination)
 {
     //fast path
     if (accept == "application/json")
     {
         Json.Serialize(value, destination, false);
         return("application/json");
     }
     if (accept == "application/json;minimal")
     {
         Json.Serialize(value, destination, true);
         return("application/json");
     }
     if (accept == "application/x-protobuf")
     {
         Protobuf.Serialize(value, destination);
         return("application/x-protobuf");
     }
     if (accept == "application/xml")
     {
         Xml.Serialize(value, destination);
         return("application/xml");
     }
     //Slow path
     accept = (accept ?? "application/json").ToLowerInvariant();
     if (accept.Contains("application/xml"))
     {
         Xml.Serialize(value, destination);
         return("application/xml");
     }
     if (accept.Contains("application/x-protobuf"))
     {
         Protobuf.Serialize(value, destination);
         return("application/x-protobuf");
     }
     Json.Serialize(value, destination, false);
     return("application/json");
 }