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.