我有一堆C#类,它们是从XSD自动生成的.然后我基于那些C#类生成XML文件.到目前为止还没有任何东西
问题:
生成的XML文件正在通过验证,验证需要一个额外的属性到所有XML标签xsi:nil="true".基本上标签看起来应该像: <testTag.01 xsi:nil="true" NV="123123" />但我无法在C#中实现.我的代码是:
Run Code Online (Sandbox Code Playgroud)if (myObject.TestTag.HasValue) { t.testTag01 = new testTag01(); t.testTag01.Value = myObject.TestTag.Value; } //else //{ // t.testTag01 = new testTag01(); // t.testTag01.NV = "123123";//Not Recorded //}
此代码生成<testTag.01>SomeValue</testTag.01>或<testTag.01 xsi:nil="true"/>.
如果我取消注释ELSE,结果将是:<testTag.01>SomeValue</testTag.01>或<testTag.01 NV="123123" />.
所以我不知道如何获得验证工具所需的格式.有任何想法吗 ?
PS
这是自动生成的C#类:
/// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd","4.0.30319.33440")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code") ] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true,Namespace ="http://www.blabla.org")]
public partial class testTag01 {
Run Code Online (Sandbox Code Playgroud)private string nvField; private SomeEnum valueField; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string NV …
我有一个需要序列化为EDI格式的对象.对于这个例子,我们会说它是一辆汽车.汽车可能不是b/c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变.
我有许多枚举,如下所示,应用了自定义属性.
public enum RoofStyle
{
[DisplayText("Glass Top")]
[StringValue("GTR")]
Glass,
[DisplayText("Convertible Soft Top")]
[StringValue("CST")]
ConvertibleSoft,
[DisplayText("Hard Top")]
[StringValue("HT ")]
HardTop,
[DisplayText("Targa Top")]
[StringValue("TT ")]
Targa,
}
Run Code Online (Sandbox Code Playgroud)
通过扩展方法访问属性:
public static string GetStringValue(this Enum value)
{
// Get the type
Type type = value.GetType();
// Get fieldinfo for this type
FieldInfo fieldInfo = type.GetField(value.ToString());
// Get the stringvalue attributes
StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
typeof(StringValueAttribute), false) as StringValueAttribute[];
// Return the first if there was a match.
return attribs.Length > 0 ? attribs[0].StringValue …Run Code Online (Sandbox Code Playgroud)