Prova partendo dall'xsd che vorresti, e facendo generare la classe dal tool xsd.exe
http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx
ho creato un file "schema-fam.xsd" contenente il tuo xsd, leggermente sistemato (tu puoi prendere quello completo che hai), e modificando i minOccurs="0" a minOccurs="1":
dal "Developer Command Prompt" o "Visual Studio Command Prompt" ho lanciato l'istruzione:
xsd.exe schema-fam.xsd /classes
e mi ha generato il codice c# corrispondente alle classi definite nell'xsd:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18051
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=4.0.30319.17929.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class SelFamRetResponse {
private FamigliaCollection selFamRetResultField;
/// <remarks/>
public FamigliaCollection SelFamRetResult {
get {
return this.selFamRetResultField;
}
set {
this.selFamRetResultField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class FamigliaCollection {
private Famiglia[] collectionField;
private Result resultField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)]
public Famiglia[] Collection {
get {
return this.collectionField;
}
set {
this.collectionField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public Result Result {
get {
return this.resultField;
}
set {
this.resultField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class Famiglia {
private string famigliaProdottoField;
private string id_FamigliaProdottiField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string FamigliaProdotto {
get {
return this.famigliaProdottoField;
}
set {
this.famigliaProdottoField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string Id_FamigliaProdotti {
get {
return this.id_FamigliaProdottiField;
}
set {
this.id_FamigliaProdottiField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class Result {
private string codField;
private string descriptionField;
private string longDescriptionField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string Cod {
get {
return this.codField;
}
set {
this.codField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string Description {
get {
return this.descriptionField;
}
set {
this.descriptionField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string LongDescription {
get {
return this.longDescriptionField;
}
set {
this.longDescriptionField = value;
}
}
}
poi ho provato il procedimento inverso, compilando in una dll il file c# generato:
xsd.exe ClassLibrary1.dll
ma mi ha generato il tuo stesso xsd con i minOccurs="0":
a questo punto direi che probabilmente non è possibile settare il minOccurs="1" in quei punti, bisognerebbe ripartire dalle tue esigenze, e cioè come mai vuoi il minOccurs="1" in quei punti, quali sono le tue esigenze? e da li ripartire, ed investigare se e come la tua esigenza può essere scritta in xsd.
spero di averti dato un po' di materiale utile su cui potere lavorare
Michael Denny
Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic