Итак, я пытаюсь создать определенный формат XML для потребителей создаваемого мной API.По сути, у вас будет такая модель:
public class SampleModel
{
public ErrorCodeEnum ErrorCode { get; set; }
public List<Error> LocalizedErrors { get; set; }
public object AdditionalInformation { get; set; }
}
Теперь предположим, что у меня есть пример модели:
SampleModel model = new SampleModel()
model.ErrorCode = ErrorCodeEnum.InvalidParameters;
model.LocalizedErrors = new List<Error>
{
new Error { For = "SomeField", Message = "Your SomeField value is unacceptable." },
new Error { For = "SomeField2", Message = "Your SomeField2 value is unacceptable." },
};
model.AdditionalInformation = new SomeOtherType { SomeProperty = "Whatever" };
Я бы хотел убедиться, что сериализуется во что-товот так:
<xml>
<SampleModel>
<ErrorCode>InvalidParameters</ErrorCode>
<Errors>
<Error For="Somefield">Your SomeField value is unacceptable.</Error>
<Error For="Somefield2">Your SomeField2 value is unacceptable.</Error>
</Errors>
<SomeProperty>Whatever</SomeProperty>
</SampleModel>
Я решил довольно много этой проблемы, но остался один сторонник.По сути, сейчас все сериализуется так:
<xml>
<SampleModel>
<ErrorCode>InvalidParameters</ErrorCode>
<Errors>
<Error For="Somefield">Your SomeField value is unacceptable.</Error>
<Error For="Somefield2">Your SomeField2 value is unacceptable.</Error>
</Errors>
<AdditionalInformation>
<SomeProperty>Whatever</SomeProperty>
</AdditionalInformation>
</SampleModel>
По умолчанию XmlSerializer выводит имя свойства (в данном случае AdditionalInformation) вокруг сериализованных узлов его значения.Я пробовал несколько способов избавиться от этого узла.То, что я хотел бы видеть, - это в основном мой словарь значений, который нужно добавить на глубину 1 дочернего уровня корня XML и избавиться от AdditionalInformation.Поэтому, если бы у меня была такая модель:
SampleModel model = new SampleModel()
model.ErrorCode = ErrorCodeEnum.InvalidParameters;
model.LocalizedErrors = new List<Error>
{
new Error { For = "SomeField", Message = "Your SomeField value is unacceptable." },
new Error { For = "SomeField2", Message = "Your SomeField2 value is unacceptable." },
};
model.AdditionalInformation = new AThirdType { Foo = "Bar", Bing = "Baz" };
Я бы получил следующий XML:
<xml>
<SampleModel>
<ErrorCode>InvalidParameters</ErrorCode>
<Errors>
<Error For="Somefield">Your SomeField value is unacceptable.</Error>
<Error For="Somefield2">Your SomeField2 value is unacceptable.</Error>
</Errors>
<Foo>Bar</Foo>
<Bing>Baz</Bing>
</SampleModel>
Возможно ли это, не пытаясь создать собственный XmlSerializer / Deserializer?