gpt4 book ai didi

c# - 如何序列化为控制命名空间的 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 02:07:06 24 4
gpt4 key购买 nike

我需要生成以下 XML:

<Learner xmlns="some.domain.api">
<ActivationDate>1999-05-31T11:20:00</ActivationDate>
<EmailAddress>String content</EmailAddress>
<ExpirationDate>1999-05-31T11:20:00</ExpirationDate>
<FederalId>String content</FederalId>
<FirstName>String content</FirstName>
<Grade>K</Grade>
<LastName>String content</LastName>
<MiddleName>String content</MiddleName>
<UserName>String content</UserName>
<Password>String content</Password>
<SISId>String content</SISId>
<StateId>String content</StateId>
<Status>Active</Status>
</Learner>

我已经阅读了这些问题:

我正在使用 Xsd2Code从 XSD 生成类。 起作用了。

我试过这个:

private static string SerializeXML(Object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType(), "some.domain.api");

//settings
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;

StringWriter stream = new StringWriter();
XmlWriter writer = XmlWriter.Create(stream, settings);

serializer.Serialize(writer, obj);
return stream.ToString();
}

但是它产生了这个:

<Learner xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="some.domain.api">
<ActivationDate>1999-05-31T11:20:00</ActivationDate>
<EmailAddress>String content</EmailAddress>
<ExpirationDate>1999-05-31T11:20:00</ExpirationDate>
<FederalId>String content</FederalId>
<FirstName>String content</FirstName>
<Grade>K</Grade>
<LastName>String content</LastName>
<MiddleName>String content</MiddleName>
<UserName>String content</UserName>
<Password>String content</Password>
<SISId>String content</SISId>
<StateId>String content</StateId>
<Status>Active</Status>
</Learner>

我想摆脱 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema".

怎么做?

更新

我也已经尝试过使用 XmlSerializerNamespaces。如果我像这样添加命名空间,使用我上面的实现并进行必要的调整:

XmlSerializerNamespaces namespaces = 
new XmlSerializerNamespaces(new[] { new XmlQualifiedName("ns","some.domain.api") });

我明白了:

<Learner xmlns:ns="some.domain.api">

但我需要这个:

<Learner xmlns="some.domain.api">

如果我像这样添加 namespace ,使用我上面的实现并进行必要的调整:

XmlSerializerNamespaces namespaces = 
new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });

我明白了:

<q1:Learner xmlns:ns="some.domain.api">

对于所有 XML 标签!

有什么方法可以得到我想要的输出吗?我真的不想为此任务使用 StringBuilder...

最佳答案

你可以像上面那样做:

XmlSerializerNamespaces namespaces = 
new XmlSerializerNamespaces(new[] { new XmlQualifiedName("ns","some.domain.api") });

在写入文件后执行此操作:

StreamReader reader = new StreamReader(file_name);
string content = reader.ReadToEnd();
reader.Close();
content = Regex.Replace(content, ":ns", "");
StreamWriter writer = new StreamWriter(file_name);
writer.Write(content);
writer.Close();

不是最优雅的,但它有效。

关于c# - 如何序列化为控制命名空间的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com