serialize serializar newtonsoft deserialize deserializar and c# wcf json.net wcf-serialization

serializar - serialize json c# newtonsoft



Newtonsoft.Json provoca que la serializaciĆ³n ocurra dos veces, lo que causa una definiciĆ³n duplicada en Reference.cs (2)

Tengo un proyecto común que tiene una referencia de servicio. Después de agregar una referencia a Newtonsoft.json (Versión 6.0.2 al mismo proyecto (Común) que tiene una referencia de servicio, y una clase Serializable ChatLine

[Serializable] public class ChatLine { [JsonProperty("L")] public string LineId { get; set; } [JsonProperty("CT")] public DateTime ConversationTimeInUtc { get; set; } [JsonProperty("S")] public string SenderId { get; set; } [JsonProperty("R")] public IEnumerable<string> Recipients { get; set; } [JsonProperty("CM")] public string ConversationMessage { get; set; } }

Actualicé la referencia del servicio. Ahora, cuando se construye el proyecto común, aparece un error debajo del siguiente.

Error de compilación:

Error 5 El espacio de nombres '''' ya contiene una definición para ''AuditStatus''

Este es el código generado en Reference.cs después de actualizar la referencia del servicio.

[DataContract] public enum AuditStatus : byte { [EnumMember] Both, [EnumMember] IsAudited, [EnumMember] IsNotAudited, } // After updating reference, two definitions for above data contract is generated. /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/Presensoft.Server.Platform.DataContracts")] public enum AuditStatus { /// <remarks/> Both, /// <remarks/> IsAudited, /// <remarks/> IsNotAudited, } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.DataContractAttribute(Name="AuditStatus", Namespace="http://schemas.datacontract.org/2004/07/Presensoft.Server.Platform.DataContracts")] public enum AuditStatus : byte { [System.Runtime.Serialization.EnumMemberAttribute()] Both = 0, [System.Runtime.Serialization.EnumMemberAttribute()] IsAudited = 1, [System.Runtime.Serialization.EnumMemberAttribute()] IsNotAudited = 2, }

Nota: Lo que he notado es que agregar una referencia a Newtonsoft.Json está causando que la serialización ocurra con dos serializadores diferentes: XML serailizer y Datacontract SERATER causando una definición duplicada en Reference.cs. Si elimino la referencia a Newtonsoft.Json y cambio la clase ChatLine para que todo funcione como siempre.

[Serializable] public class ChatLine { public string LineId { get; set; } public DateTime ConversationTimeInUtc { get; set; } public string SenderId { get; set; } public IEnumerable<string> Recipients { get; set; } public string ConversationMessage { get; set; } }

Referencia.svcmap

<?xml version="1.0" encoding="utf-8"?> <ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="63f9a580-39a5-433b-9402-d7baeb737dab" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap"> <ClientOptions> <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods> <EnableDataBinding>true</EnableDataBinding> <ExcludedTypes /> <ImportXmlTypes>false</ImportXmlTypes> <GenerateInternalTypes>false</GenerateInternalTypes> <GenerateMessageContracts>false</GenerateMessageContracts> <NamespaceMappings /> <CollectionMappings /> <GenerateSerializableTypes>true</GenerateSerializableTypes> <Serializer>Auto</Serializer> <UseSerializerForFaults>true</UseSerializerForFaults> <ReferenceAllAssemblies>true</ReferenceAllAssemblies> <ReferencedAssemblies /> <ReferencedDataContractTypes /> <ServiceContractMappings /> </ClientOptions> <MetadataSources> <MetadataSource Address="http://localhost:8080/PSPlatform/mex" Protocol="mex" SourceId="1" /> </MetadataSources> <Metadata> <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="0cc6ca56-be08-43fc-a9db-76679c30c682" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="8608ab31-5932-4759-8694-33d5e8b21868" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="f26eb7a4-be99-4701-b3fe-46c59e3bd33a" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="51cd2ab9-015b-49cc-9ccd-6cddce8be7ad" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="Presensoft.Server.Platform.DataContracts.xsd" MetadataType="Schema" ID="800d64cf-92f4-4278-81dc-5ddf3fae99d8" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="Presensoft.Server.Platform.xsd" MetadataType="Schema" ID="3e3a7e24-a1f1-4cbc-8d87-25cacb67328b" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="1114c153-a85b-42ee-9ee2-b7d8dff541c3" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="service2.xsd" MetadataType="Schema" ID="11aaaecf-a88f-4385-81f1-57faec2f8232" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="Presensoft.Server.xsd" MetadataType="Schema" ID="49ed3737-ace5-4ff1-b184-3306ed8523a6" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> <MetadataFile FileName="System.xsd" MetadataType="Schema" ID="294f603b-0f68-4ef3-a1f1-a0283daec57d" SourceId="1" SourceUrl="http://localhost:8080/PSPlatform/mex" /> </Metadata> <Extensions> <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" /> <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" /> </Extensions> </ReferenceGroup>

¿Alguna idea de cuál es el problema?


Intente eliminar el atributo [Serailizable], no es necesario para JSON.Net.


Puede haber una referencia conflictiva en su proyecto. Puede decirle a Visual Studio que ignore su ensamblaje al crear una nueva referencia de servicio. Intente seleccionar "Reutilizar tipos ..." y seleccione todo menos sus propios ensamblajes.