XmlSerializer может десериализовать в Nullable <интервал>?

Это - дубликат XmlSerializer, может десериализовать в Nullable <интервал>? но мне нужно решение, что ни изменить xml документ, ни вынуждает меня реализовать интерфейс IXmlSerializable. Я не хочу реализовывать IXmlSerializable, потому что у меня есть много дополнительных элементов около > это десериализовывается правильно.

Мой xml может содержать любой элемент 4 или


...
either 4 or 
... [other elements]

Класс

public class root
{
public int? number {get; set;}
...
}

не работает.

5
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Вы можете просто использовать суррогатное свойство.

public class MyType1
{
    // XmlIgnore means it is not directly serialized
    [XmlIgnore]
    public int? number
    {
        get; set;
    }

    // acts as a surrogate for the nullable property
    [XmlElement("number")]
    public string _number_Surrogate
    {
        get
        {
            return (number.HasValue) ? number.ToString() : "";
        }
        set
        {
            if (!value.Equals(""))
            {
                number = Int32.Parse(value);
            }
        }
    }

    public System.DateTime Time
    {
        get; set;
    }
}
9
ответ дан 14 December 2019 в 04:39
поделиться

Вы всегда можете сделать строку заменить на окончательный выход XML.

Replace(" i:nil=\"true\"/>","/>");

Вообще, это плохая идея, чтобы попытаться взломать на XML со строковыми манипуляциями, но замена выше безопасна и всегда будет конвертировать <все, что я: nil = "True" /> - <Что-нибудь /> .

Это хак, но приемлемый, учитывая альтернативу.

-1
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

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