Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用DataContractResolver序列化接口时过度冗长的XML_.net_Datacontractserializer - Fatal编程技术网

.net 使用DataContractResolver序列化接口时过度冗长的XML

.net 使用DataContractResolver序列化接口时过度冗长的XML,.net,datacontractserializer,.net,Datacontractserializer,到目前为止,我还没有得到答案,所以我把问题大大缩短了 基本上,我尝试用DataContractSerializer序列化接口。但是当使用DataContractResolver执行此操作时,生成的XML非常冗长。我有一个接口IAnimal和一个具体的实现Cat 如果我只是序列化Cat,我会得到XML: <Cat xmlns="http://schemas.datacontract.org/2004/07/TestDataContractResolver.Concrete" xmlns:i=

到目前为止,我还没有得到答案,所以我把问题大大缩短了

基本上,我尝试用DataContractSerializer序列化接口。但是当使用DataContractResolver执行此操作时,生成的XML非常冗长。我有一个接口IAnimal和一个具体的实现Cat

如果我只是序列化Cat,我会得到XML:

<Cat xmlns="http://schemas.datacontract.org/2004/07/TestDataContractResolver.Concrete" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Species>feline</Species>
  <Weight>1</Weight>
</Cat>

您的目标是获取xml吗?还是序列化/反序列化接口构造?我可能可以干净利落地完成这项工作,但使用不同的序列化程序,而不是二进制FORAMTTER/NetDataContractSerializer,它们是cheating@Marc,我还没有对它进行足够深入的研究。我当然对非xml选项持开放态度,但最终我需要支持版本控制问题,使用xml通常更容易。你在想protobuf吗?你读到了我的想法:protobuf也被设计成了一个简单的版本,我到时候会研究它。它可以序列化接口而不需要接口上的属性吗?protobuf net v2可以,是的-但是我需要看一个具体的例子来填补空白,这是您获取xml的目标吗?还是序列化/反序列化接口构造?我可能可以干净利落地完成这项工作,但使用不同的序列化程序,而不是二进制FORAMTTER/NetDataContractSerializer,它们是cheating@Marc,我还没有对它进行足够深入的研究。我当然对非xml选项持开放态度,但最终我需要支持版本控制问题,使用xml通常更容易。你在想protobuf吗?你读到了我的想法:protobuf也被设计成了一个简单的版本,我到时候会研究它。它可以序列化接口而不需要接口上的属性吗?protobuf net v2可以,是的-但是我需要看一个具体的例子来填补空白
<z:anyType i:type="a:TestDataContractResolver.Concrete.Cat" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="TestDataContractResolver.Concrete, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <Species xmlns="http://schemas.datacontract.org/2004/07/TestDataContractResolver.Concrete">feline</Species>
  <Weight xmlns="http://schemas.datacontract.org/2004/07/TestDataContractResolver.Concrete">1</Weight>
</z:anyType>
public class ModelDataContractResolver : DataContractResolver
    {
        public override Type ResolveName(string typeName, string typeNamespace, Type declaredType, DataContractResolver knownTypeResolver)
        {
            return knownTypeResolver.ResolveName(typeName, typeNamespace, declaredType, null) ?? Type.GetType(typeName + ", " + typeNamespace);
        }

        public override bool TryResolveType(Type type, Type declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
        {
            if (knownTypeResolver.TryResolveType(type, declaredType, null, out typeName, out typeNamespace))
            {
                return true;
            }

            XmlDictionary dictionary = new XmlDictionary();
            typeName = dictionary.Add(type.FullName);
            typeNamespace = dictionary.Add(type.Assembly.FullName);

            return true;
        }
    }