Как обеспечить совместимость с DataContractSerializer при общении с приложениями, отличными от .NET? - PullRequest
1 голос
/ 22 сентября 2010

Скажем, у меня есть приложение, отличное от .NET, которое должно записывать данные для десериализации приложением .NET через DataContractSerializer. Где спецификация, описывающая точный необходимый формат?

Такая спецификация должна описывать множество вещей, в том числе:

Похоже на простой вопрос, не так ли? Тем не менее, я не вижу, чтобы он был адресован напрямую в MSDN. (все, что я нашел, было forum-posts о том, что приложение, отличное от .NET, должно сначала запросить у приложения .NET файл спецификации WSDL.

(я не использую ничего из WCF, кроме DataContractSerializer)

Ответы [ 2 ]

0 голосов
/ 22 сентября 2010

DataContractSerializer не является частью WCF, это часть сериализации во время выполнения, от которой зависит WCF.

В прошлом я использовал DataContractSerializer для десериализации объектов из XML, который я сгенерировал из XML-преобразования. Это может быть ниже того, что вы хотите сделать.

Чтобы выяснить, что требуется XML для сериализатора, мне было проще написать небольшой фрагмент кода, сериализовавший мой объект в строку, чтобы увидеть, как он должен быть структурирован и каковы пространства имен XML.

[TestFixture]
public class TestDataContractSerializerOutput
{
    [Test]
    public void Should_give_me_some_serialized_xml()
    {
        Foo foo = new Foo();
        foo.Bars.Add(new Bar { Name = "Wibble"});
        var dataContractSerializer = new DataContractSerializer(typeof(Foo), new[] { typeof(Bar) } );

        using (Stream stream = new MemoryStream())
        {
            dataContractSerializer.WriteObject(stream, foo);
            stream.Position = 0;

            using (StreamReader streamReader = new StreamReader(stream))
            {
                Trace.WriteLine(streamReader.ReadToEnd());
            }
        }
    }
}

[DataContract]
public class Foo
{
    public Foo()
    {
        Bars = new List<IBar>();
    }

    [DataMember]
    public IList<IBar> Bars { get; set; }
}

public interface IBar
{
    string Name { get; set; }
}

[DataContract]
public class Bar : IBar
{
    public string Name { get; set; }
}

С помощью этой информации вы можете увидеть, как структурировать XML, а также получить схемы XML для дополнительной проверки.

0 голосов
/ 22 сентября 2010

Мы используем WSDL для связи определения сервиса между приложениями Java и .net, он отлично работает для нас.

Одна вещь, которую вам нужно учитывать, - какие типы данных вы используете, используйте те, которые используютсяпонимается обеими системами, например:

  • Если вы создаете сервис в .net, не используйте наборы данных
  • Если вы создаете сервис в java, не используйте векторы
...