因此,我试图为我创建的API的使用者创建特定的XML格式。实际上,你会像这样一个模型:复杂的XML序列化问题
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)周围的序列化的节点是值的名称。我一直在尝试多种方式来摆脱这个节点。我想看到的基本上是我的值字典,它被附加在XML根的1个子级深处,并且摆脱了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 /解串器的精力去?
我认为今天我们将详细讨论这个问题后,我们将在XML序列化方面采取不同的方向;然而,这些建议很有帮助。标记为已回答。 – Tejs 2011-03-10 20:22:56