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.