DataContractSerializer правильно не десериализовывает, значения для методов в объекте отсутствуют

string псевдоним в C# для System.String .
Так технически, нет никакого различия. Это похоже int по сравнению с [1 114] System.Int32 .

До инструкций, обычно рекомендуется использовать string любое время, которое Вы отсылаете к объекту.

, например,

string place = "world";

Аналогично, я думаю, что обычно рекомендуется использовать String, если необходимо обратиться конкретно к классу.

, например,

string greet = String.Format("Hello {0}!", place);

Это - стиль, который Microsoft склонна использовать в [1 111] их примеры .

кажется, что руководство в этой области, возможно, изменилось, как [1 112], StyleCop теперь осуществляет использование определенных псевдонимов C#.

11
задан Mark Dickinson 5 March 2010 в 08:42
поделиться

2 ответа

Ну, я нашел свой собственный ответ после того, как много играл с ним ... он должен быть в алфавитном порядке. поэтому, если класс имеет

[Serializable]
[DataContract(Namespace = "")]    
public class SomeClass
{
    [DataMember]
    public string FirstName
    { 
        get; set;
    }

    [DataMember]
    public string LastName
    { 
        get; set;
    }

    [DataMember]
    private IDictionary<long, string> customValues;
    public IDictionary<long, string> CustomValues
    {
        get { return customValues; }
        set { customValues = value; }
    }
}

, тогда xml следует определять в алфавитном порядке.

<?xml version="1.0" encoding="UTF-8"?>
 <SomeClass>
 <CustomValues>
    <Value1>One</Value1>
    <Value2>Two</Value2>
 </CustomValues >
 <FirstName>John</FirstName>
 <LastName>Smith</LastName>
 </SomeClass>

ну почему h ... он должен быть в алфавитном порядке?

16
ответ дан 3 December 2019 в 02:52
поделиться

Для этого нужен атрибут Order ; Если у вас нет контроля над десериализуемым XML, это единственный обходной путь, о котором я знаю.

В вашем первом примере это будет

[Serializable]
[DataContract(Namespace = "")]
public class SomeClass
{
    [DataMember(Order = 0)]
    public string FirstName
    { 
        get; set;
    }

    [DataMember(Order = 1)]
    public string LastName
    { 
        get; set;
    }

    [DataMember(Order = 2)]
    private IDictionary customValues;
    public IDictionary CustomValues
    {
        get { return customValues; }
        set { customValues = value; }
    }
}
14
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: