【问题标题】:ediFabric Framework v6.7.3: XML to EDI problemsediFabric Framework v6.7.3:XML 到 EDI 的问题
【发布时间】:2017-01-10 17:10:24
【问题描述】:

我正在尝试通过通过 EdiFabric 购买的 EdiFabric.Definitions.X12_004010_855 类构建 EDI 855 文件。我遇到了问题,试图将此对象转换为有效的 EDI 855 文件。这就是我正在做的事情:

创建新的 M_855 对象:

var m_855 = new M_855();

m_855.S_ST = new EdiFabric.Definitions.X12_004010_855.S_ST();
m_855.S_ST.D_329_2 = "Stuff...";
m_855.S_ST.D_143_1 = EdiFabric.Definitions.X12_004010_855.S_STD_143_1.Item855;

m_855.S_BAK = new EdiFabric.Definitions.X12_004010_855.S_BAK();

....more code, but removed for brevity...

将对象序列化为 XML

var xml = Serialize<M_855>(m_855, "www.edifabric.com/x12")

var interchange = Interchange.LoadFrom(xml); //blows up here

public static XElement Serialize<T>(T instance, string nameSpace)
{
    // Fix: using instance.GetType() instead of typeof(T)
    var serializer = new XmlSerializer(instance.GetType(), nameSpace);
    using (var ms = new MemoryStream())
    {
        serializer.Serialize(ms, instance);
        ms.Position = 0;
        return XElement.Load(ms, LoadOptions.PreserveWhitespace);
    }
}

这给了我这个有效的 XML:

<M_855 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="www.edifabric.com/x12">
  <S_ST>
    <D_143_1>855</D_143_1>
    <D_329_2>1126</D_329_2>
  </S_ST>
  <S_BAK>
    <D_353_1>06</D_353_1>
    <D_587_2>AD</D_587_2>
    <D_324_3>TEST3</D_324_3>
    <D_373_4>20160902</D_373_4>
  </S_BAK>
  <G_N1>
    <S_N1>
      <D_98_1>ST</D_98_1>
      <D_93_2>Name here</D_93_2>
    </S_N1>
  </G_N1>
  <G_PO1>
    <S_PO1>
      <D_350_1>001</D_350_1>
      <D_330_2>1</D_330_2>
      <D_212_4>344.35</D_212_4>
      <D_234_7>10038</D_234_7>
      <D_234_9>0135010038</D_234_9>
    </S_PO1>
    <G_ACK>
      <S_ACK>
        <D_668_1>AC</D_668_1>
      </S_ACK>
    </G_ACK>
  </G_PO1>
  <G_CTT>
    <S_CTT>
      <D_354_1>1</D_354_1>
    </S_CTT>
  </G_CTT>
  <S_SE>
    <D_96_1>6</D_96_1>
    <D_329_2>1126</D_329_2>
  </S_SE>
</M_855>

调用 LoadFrom() var 交换 = Interchange.LoadFrom(xml)

错误

InnerException: {"<M_855 xmlns='www.edifabric.com/x12'> was not expected."}
Message: "There is an error in XML document (0, 0)."

这是应该的吗?我还尝试创建一个新的 Interchange() 对象并将 XML 附加为 Message.Item 但收到相同的错误消息。

【问题讨论】:

    标签: xml edi edifabric


    【解决方案1】:

    在这一行: var xml = Serialize(m_855, "TestNameSpace")

    命名空间实际上应该是“www.edifabric.com/x12”。不允许序列化到自定义命名空间。

    【讨论】:

    • 唐,非常感谢您的帮助!我用您的建议更新了上面的代码,但仍然出现错误。我包含了我的 Serialize 方法,因此您也可以查看它。
    【解决方案2】:

    所以在经历了很多挫折之后,我让它工作了。我原始帖子中的 XML 结构不完整。上面的 M_855 节点只是我需要传递给 Interchange.LoadFrom() 方法的 XML 的一部分。

    正确的结构需要是一个完整的 X12 包络,从一个 INTERCHANGE 节点开始。

    <INTERCHANGE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="www.edifabric.com/x12">
        <S_ISA>
        ...
        </S_ISA>
        <GROUPS>
            <GROUP>
                <S_GS>
                ...
                </S_GS>
                <MESSAGES>
                    <MESSAGE>
                    <Item>
                        <M_855>
                          ...
                        </M_855>
                    </Item>
                    <Context>
                        <Tag>855</Tag>
                        <Version>004010</Version>
                        <Format>X12</Format>
                    </Context>
                    </MESSAGE>
                </MESSAGES>
                <S_GE>
                ...
                </S_GE>
            </GROUP>
        </GROUPS>
        <S_IEA>
        ...
        </S_IEA>
    </INTERCHANGE>
    

    所以现在我不是序列化 M_855 对象,而是这样做:

    var interchange855 = new Interchange();
    
    interchange855.Isa = new S_ISA()
    {
    ...
    }
    
    interchange855.Groups.Add(new Group());
    
    interchange855.Iea = new S_IEA()
    {
    ...
    }
    
    var edi = interchange855.ToEdi(); //works!
    

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2014-11-24
      • 2017-06-06
      • 2017-03-03
      • 2010-11-21
      • 2012-03-04
      • 2015-03-30
      • 2016-09-16
      • 2017-07-02
      相关资源
      最近更新 更多